関数の中に入って、ステップアウトでデバッグすると。。。

[戻る]
Tabro 2002/09/07(土) 18:26:33
いざデバッグで実行をすると、関数に入ってわずか1ステップで、
”ハンドルされていない例外は
 xxx.exeにあります・0xC00000FD
  Stack Overflow”
 (xxxとはプログラムの名前)
というエラーが、呼ばれる関数に入ったとたん出ます。何が悪いのでしょうか?

その関数の入り口とは
VOID add()
{
    int   j;
    int   H1;
    int   A[100000];
    int   M;
    FILE  *fn;
    FILE  *fi;

         if (Amp == 0)
         {             for 
          (j=0;j<100000;j++)       

というところです。
何が悪いのでしょうか?

Tabro 2002/09/07(土) 20:28:22
多少、進展がありました。

配列の数字を減らしたら、うまくいくようになりました。
これはMAINの中でやると通っているのですが、どうすれば。解決出来るのでしょうか?

本来ならば、
A[330000]くらい欲しく、
A[j] = *((char*)pPlaybackBuffer+j);とやりたいところなのですが。
(Main内でやると大丈夫なのですが)
関数の中でこれだけ配列を取ってしまうこと自体無理なのかな。

a 2002/09/07(土) 21:16:36
>int   A[100000];
>Stack Overflow”

配列を動的に確保してみてはどうでしょうか?
new ro malloc など

Tabro 2002/09/08(日) 14:18:42
えっ?えっ?

これはどうやるのでしょうか?

b 2002/09/08(日) 16:30:38
>new ro malloc など
new or malloc でしょうね。

プロジェクトの設定でリンクのアウトプット
スタックアロケーションのサイズを指定する
という手もあるような・・・。
 ディフォルトは1MBらしいので (VC6)
 sizeof(int)*配列のサイズ + その他の変数のサイズ
 以上にしてみる。 (計算が大変・・・)

c 2002/09/08(日) 18:38:07
>これはどうやるのでしょうか?

int   A[100000];
の代わりに
int  *A;
と定義して

new で領域を確保する
A = new int[330000];

if (Amp == 0)
{
for (j=0;j<330000;j++)
 A[j] = 0; 

delet で領域を解放する
delete [] A;

PAI 2002/09/09(月) 15:51:37
プログラムの開始時から確保しておいて良いのであれば、

static int A[330000];

というのもありですかね。

古いスレッドには追加発言できません。