此代碼是給我段錯誤:C++數組聲明問題
#include <stdio.h>
int main(int argc,char** argv[]){
int ar[20000000];
return 0;
}
但是,如果我通過0減少數組的大小 - 那麼它的罰款。我超過了最大尺寸?如果我想存儲整數量呢?謝謝。
此代碼是給我段錯誤:C++數組聲明問題
#include <stdio.h>
int main(int argc,char** argv[]){
int ar[20000000];
return 0;
}
但是,如果我通過0減少數組的大小 - 那麼它的罰款。我超過了最大尺寸?如果我想存儲整數量呢?謝謝。
這可能與您試圖在堆棧上分配超過70兆字節的數據有關。 Windows具有每個線程IIRC的默認堆棧大小爲1兆字節。嘗試用new
的空閒存儲分配它,就像這樣:
int* ar = new int[20000000];
,並使用它時,你就大功告成了,delete[]
它:
delete[] ar;
你得到堆棧溢出:D一個真正的。
在堆上分配的存儲器,使用new
int* ar = new int[ 20000000 ];
// do stuff with ar
delete[] ar; // do **not** forget about this
您可能超過由堆棧幀,它是由編譯器執行的允許的大小。如果您要動態分配空間,例如:
int array = new int[SIZE]
您將受到操作系統和硬件而不是您的編譯器的限制。 (這是因爲在堆上動態分配內存並將其存儲,而局部聲明的變量存儲堆棧,其中有一個嚴格的大小限制上。)
,如果我沒看錯400萬是極限
如果你真的想在堆棧上分配這個數組,你可以。你只需要增加堆棧大小。你沒有說你正在使用什麼編譯器/鏈接器,但Visual Studio C++的說明在這裏:http://msdn.microsoft.com/en-us/library/tdkhxaks.aspx和其他環境應該有類似的選項。
是什麼讓你認爲它是70兆字節?它並不是說在C/C++標準中int是32位。 – 2011-05-09 00:19:50