我使用的代碼塊,我的代碼如下:的malloc沒有返回NULL,但索引數組給分段錯誤
分配陣列T:
long long TAILLE_MAX= 5000000000000;
long long *T= malloc(sizeof(long long)*TAILLE_MAX);
然後我想用的一部分該陣列的每個時間和下降值填充:
long long step= 5;
for(long long TAILLE=500000000; TAILLE<=TAILLE_MAX; TAILLE*=step){
if(step==2) step=5;
else step= 2;
for(long long n=0; n<TAILLE; n++) T[n]= TAILLE-n;
// rest of code (which is not reached) ...
問題是在此循環:
for(long long n=0; n<TAILLE; n++) T[n]= TAILLE-n;
它給分段故障,並且當我使用的調試器來分析我發現,它給出了錯誤,每次當n達到121197052
必須被包含在陣列中的問題,
我認爲,它是一種與堆大小,但經t問題是由malloc
分配,並沒有返回NULL,
我試圖通過將此鏈接器,來增加堆的大小:-Wl,--stack,568435456
,但同樣的錯誤,
奇怪的是我試圖分配一個小於012的值但是malloc
返回NULL !!!!它如何分配一個很大的尺寸,並返回NULL以減小尺寸!
我有Windows 7旗艦版64位,4Gb內存,Intel Core Duo 2.80GHz。
在此先感謝您的任何建議。
編輯: 關於持有這個問題:我不是在尋找調試程序!一點也不!我正在詢問其中的各種指令的行爲,如malloc
,內存分配...,我不需要爲我的程序提供解決方案我正在尋找有關以上幾點對其他成員有用的信息,即使是標題顯示我在詢問某事的行爲。
這是內存 – StoryTeller
淫穢金額爲64位編譯過?即使64位機器,我的MSVC 15.0是32位。什麼是您可以傳遞給'malloc'的最大值?我懷疑你的「long long」正在被截斷。 –
您通過codeblock IDE使用的編譯器是否創建64位輸出? Malloc將size_t作爲大小參數。在32位系統上,您要求的40,000,000,000,000字節的大小遠遠超過32位限制。 – Gerhardh