2


0

配列を宣言したいのですが。int a [256] [256] [256]そしてプログラムがハングします。 (私はすでに他のすべてのコードをコメントアウトしています…​)int a [256] [256]を試すと、うまくいきます。

私はMingW Cコンパイラ、Eclipse CDTを使用しています。

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

任意のコメントは歓迎されています。

3 Answer


10


あなたの配列が関数に対してローカルであるなら、これは起こるかもしれません。 その場合は、2 ^ 24インチ(2 ^ 26バイト、つまり64 MB)を保持するのに十分なスタックサイズが必要です。

アレイをグローバルにすると、うまくいくはずです。 Windowsでスタックサイズを変更する方法がわかりません。 Linuxでは、 "ulimit -s 10000"(単位はKB)を使用します。

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

理想的には、プログラムを終了させ(コアダンプ)、ハングアップすることはないでしょう。 私はcygwinでやっています。


0


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


0


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

#include int main(){int * a;} a =(int *)malloc(256 * 256 * 256 * sizeof(int)); //ヒープ内に配列スペースを割り当てる0を返す}

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

http://bweaver.net/files/stackoverflow1.jpg[altテキストhttp://bweaver.net/files/stackoverflow1.jpg]

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

mallocまたはその友人を介して配列を割り当てるのがいい方法です。 (そのルートをたどる必要がある場合は、グローバルに作成することもできます。)