作者qoojordon (穎川琦)
看板C_and_CPP
標題[問題] 單支程式malloc上限
時間Sat May 9 02:06:06 2015
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
CentOS 5.9
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
No
問題(Question):
主要為附帶的程式碼網頁 line 268~273 出錯
buildGraph()為參考輸入的文字檔後 , 動態要求記憶體空間 ,
並給予資料結構初值 , POINT_NUM1的size很大 , 此例值為14128
目前猜測是單一程式能要求的記憶體空間有限制
餵入的資料(Input):
兩個約500K的文字檔
預期的正確結果(Expected Output):
line 268~273 能正確的對 h1指標的每一個item初始化
錯誤結果(Wrong Output):
line 268~273 在i=13140 時發生 Segmentation Fault
程式碼(Code):(請善用置底文網頁, 記得排版)
http://ideone.com/eNFva5
補充說明(Supplement):
h1指標和 和 line 256~264的pointG1指標是用相同的觀念去建構的 ,
上面的loop能順利跑完 , 因此排除是結構的指標使用錯誤
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.77.197
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1431108370.A.AF5.html
不好意思 , 我自己解決了 , 抱歉佔用板面 , 問題在於
line 6: #define POINT_NUM1 inputNum1+outputNum1+wireNum1
這邊的定義詞 替換 malloc程式碼(line 266)後 , 會造成先乘後加的錯誤 ,
因此要到的空間比預期的少 , 謝謝大家
※ 編輯: qoojordon (59.115.77.197), 05/09/2015 02:18:02
→ scwg: POINT_NUM1 的 macro 定義加上括號: 05/09 03:44
→ scwg: 唔, 慢了. 不過建議置底的第九戒加入最外圍也最好加括號 05/09 03:46
→ azureblaze: 或者不要用#define來做這種事 用const就好了 05/09 11:38
→ chchwy: 就要這麼一丁點空間 離限制還差得遠吧XDDD 05/09 23:58
→ dirkc: malloc的上限通常是user address space的大小減去其他 05/16 23:17
→ dirkc: 資料(code,stack,...)所占的記憶體空間 05/17 09:02
→ dirkc: 64位元的user address space通常8TB,32位元是2或3GB 05/17 09:05
→ dirkc: 不過malloc是配連續的記憶體,所以實際執行要看你程序 05/17 09:16
→ dirkc: 當下的記憶體分布狀況 05/17 09:18