2

配列を宣言したい:int a [256][256][256]そしてプログラムがハングします。(私はすでに他のすべてのコードをコメントアウトしています...)int a [256] [256]を試してみると、問題なく実行されます。

私はMingWC++コンパイラであるEclipseCDTを使用しています。

私のコードは次のとおりです。intmain(){int a [256] [256] [256]; 0を返します。}

コメントは大歓迎です。

4

3 に答える 3

10

これは、配列が関数に対してローカルである場合に発生する可能性があります。その場合、2 ^ 24 int(2 ^ 26バイト、つまり64 MB)を保持するのに十分なスタックサイズが必要になります。

配列をグローバルにすると、機能するはずです。Windowsでスタックサイズを変更する方法がわかりません。Linuxでは、「ulimit -s10000」を使用します(単位はKBです)。

グローバル(並行性または再帰)を使用しない正当な理由がある場合は、malloc/freeを使用できます。重要なことは、スタックを増やすか(スレッドを使用している場合はお勧めできません)、ヒープ(malloc / free)または静的データセグメント(グローバル)でデータを取得することです。

理想的には、ハングアップするのではなく、プログラムの終了(コアダンプ)を取得します。私はcygwinで行います。

于 2009-08-11T22:26:23.537 に答える
0

たぶんあなたは16MBの空き連続メモリを持っていませんか?想像するのは難しいですが、可能です...

于 2009-08-11T22:25:20.140 に答える
0

あなたはこのようなものが欲しい

#include <malloc.h>
int main()
{
    int *a;
    a = (int*)malloc(256*256*256*sizeof(int)); // allocate array space in heap
    return 0;
}

それ以外の場合は、次のようになります。

代替テキストhttp://bweaver.net/files/stackoverflow1.jpg

他の人が指摘しているように、コードでは配列をスタックに割り当てて、それを爆破しているからです。

mallocまたはその友達を介してアレイを割り当てるのが方法です。(そのルートに行かなければならない場合は、グローバルに作成することもできます。)

于 2009-08-11T23:35:19.950 に答える