配列を宣言したい: int a [256] [256] [256] そしてプログラムがハングする。 (私は既に他のすべてのコードをコメントアウトしています...) int [256] [256]を試すと大丈夫です。C++で多次元配列がハング
私はMingW C++コンパイラ、Eclipse CDTを使用しています。
私のコードは: int main(){ int a [256] [256] [256]; return 0; }
コメントは歓迎されます。
配列を宣言したい: int a [256] [256] [256] そしてプログラムがハングする。 (私は既に他のすべてのコードをコメントアウトしています...) int [256] [256]を試すと大丈夫です。C++で多次元配列がハング
私はMingW C++コンパイラ、Eclipse CDTを使用しています。
私のコードは: int main(){ int a [256] [256] [256]; return 0; }
コメントは歓迎されます。
これは、配列が関数に対してローカルである場合に発生する可能性があります。その場合、2^24の整数(2^26バイト、または64MB)を保持するのに十分なスタックサイズが必要です。
アレイをグローバルにすると、動作するはずです。 Windowsでスタックサイズを変更する方法がわかりません。 Linuxでは "ulimit -s 10000"(単位はKB)を使います。
グローバル(並行性または再帰)を使用しないのがよい理由がある場合は、malloc/freeを使用できます。重要なことは、スタックを増やす(スレッドを使用している場合は良い考えではない)か、ヒープ(malloc/free)または静的データセグメント(グローバル)でデータを取得することです。
理想的には、プログラム終了(コアダンプ)が発生し、ハングアップしません。私はcygwinでやっています。他の人が指摘したように、あなたのコードでは、あなたが配列を割り当てている
alt text http://bweaver.net/files/stackoverflow1.jpg
、ので:
+1、私にそれを打つ! mallocまたはnew []を使ってヒープからメモリを割り当てると、問題が解決するでしょう。 –
スタックから64MBを食べようとすると、おそらく問題になる可能性があります。 –
16MBの空き連続メモリがないのでしょうか?想像するのは難しいですが、可能...
@bkritzer:64MB; intは4バイトです。 8-) – RichieHindle
「int」部分に注意を払っていませんでした。 – bkritzer
は、あなたがこのような何かを取得し、それ以外の場合、この
#include <malloc.h>
int main()
{
int *a;
a = (int*)malloc(256*256*256*sizeof(int)); // allocate array space in heap
return 0;
}
ような何かをしたいです積み重ねて、それを吹く。
mallocまたはその友人を介して配列を割り当てることは、方法です。 (あなたがそのルートに行く必要がある場合は、グローバルに作成することもできます)
「他のすべてのコードをコメントアウトする」とはどういう意味ですか? 'int a [256] [256] [256]'と空のメインメソッド 'int main(){}'からなるプログラムがハングすることを意味しますか? –
実際のコードは大歓迎です。 – Alex
256 * 256 * 256は1600万要素です。あなたの配列は32ビットシステムで64メガバイトです。現代のシステムでは不合理ではありませんが、(関数の中で)スタックに割り振っているのであれば、おそらくあなたのコンパイラやOSよりも大きいでしょう。 –