配列を宣言したい:int a [256][256][256]そしてプログラムがハングします。(私はすでに他のすべてのコードをコメントアウトしています...)int a [256] [256]を試してみると、問題なく実行されます。
私はMingWC++コンパイラであるEclipseCDTを使用しています。
私のコードは次のとおりです。intmain(){int a [256] [256] [256]; 0を返します。}
コメントは大歓迎です。
配列を宣言したい:int a [256][256][256]そしてプログラムがハングします。(私はすでに他のすべてのコードをコメントアウトしています...)int a [256] [256]を試してみると、問題なく実行されます。
私はMingWC++コンパイラであるEclipseCDTを使用しています。
私のコードは次のとおりです。intmain(){int a [256] [256] [256]; 0を返します。}
コメントは大歓迎です。
これは、配列が関数に対してローカルである場合に発生する可能性があります。その場合、2 ^ 24 int(2 ^ 26バイト、つまり64 MB)を保持するのに十分なスタックサイズが必要になります。
配列をグローバルにすると、機能するはずです。Windowsでスタックサイズを変更する方法がわかりません。Linuxでは、「ulimit -s10000」を使用します(単位はKBです)。
グローバル(並行性または再帰)を使用しない正当な理由がある場合は、malloc/freeを使用できます。重要なことは、スタックを増やすか(スレッドを使用している場合はお勧めできません)、ヒープ(malloc / free)または静的データセグメント(グローバル)でデータを取得することです。
理想的には、ハングアップするのではなく、プログラムの終了(コアダンプ)を取得します。私はcygwinで行います。
たぶんあなたは16MBの空き連続メモリを持っていませんか?想像するのは難しいですが、可能です...
あなたはこのようなものが欲しい
#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またはその友達を介してアレイを割り当てるのが方法です。(そのルートに行かなければならない場合は、グローバルに作成することもできます。)