我想聲明一個數組: 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個字節或64 MB)的堆棧大小。
如果你讓這個數組成爲全局數組,它應該可以工作。我不確定如何在Windows中修改堆棧大小;在Linux中,你會使用「ulimit -s 10000」(單位是KB)。
如果您有充分的理由不使用全局(併發或遞歸),您可以使用malloc/free。重要的是要麼增加你的堆棧(如果你使用線程不是一個好主意),或者獲得堆(malloc/free)或靜態數據段(全局)上的數據。
理想情況下,你會得到程序終止(核心轉儲)而不是掛起。我在cygwin做。
+1,打我吧!如果這確實是問題,那麼使用malloc或new []從堆中分配內存也可以解決問題。 – 2009-08-11 22:30:23
嘗試從堆棧中吃掉64MB很可能是一個問題,確實是+1。 – 2009-08-11 22:31:26
也許你沒有16MB的自由連續內存?很難想象,但可能...
@bkritzer:64MB;整數是4個字節。 8-) – RichieHindle 2009-08-11 22:26:42
哎呀,沒有注意到「int」部分。 – bkritzer 2009-08-11 22:29:42
你想是這樣的
#include <malloc.h>
int main()
{
int *a;
a = (int*)malloc(256*256*256*sizeof(int)); // allocate array space in heap
return 0;
}
否則,你得到的東西是這樣的:
alt text http://bweaver.net/files/stackoverflow1.jpg
因爲,正如其他人所指出的,在你的代碼你分配的數組在堆疊上,然後吹起來。
通過malloc或其朋友分配數組是最好的選擇。 (如果你必須走這條路線,全球創建也是可行的。)
你是什麼意思「註釋掉所有其他代碼」?你的意思是說,一個由單行'int a [256] [256] [256]'和空主方法'int main(){}'組成的程序掛起? – 2009-08-11 22:21:32
歡迎使用實際的代碼。 – Alex 2009-08-11 22:21:51
256 * 256 * 256是1600萬個元素;您的陣列在32位系統上是64兆字節。對於現代系統來說不是不合理的,但是如果你在堆棧上(在函數內部)分配,它可能比你的編譯器和操作系統期望的要大。 – 2009-08-11 22:26:15