[問題] 單支程式malloc上限

看板C_and_CPP作者 (穎川琦)時間10年前 (2015/05/09 02:06), 10年前編輯推噓0(009)
留言9則, 4人參與, 最新討論串1/1
開發平台(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

05/09 03:44, , 1F
POINT_NUM1 的 macro 定義加上括號:
05/09 03:44, 1F

05/09 03:46, , 2F
唔, 慢了. 不過建議置底的第九戒加入最外圍也最好加括號
05/09 03:46, 2F

05/09 11:38, , 3F
或者不要用#define來做這種事 用const就好了
05/09 11:38, 3F

05/09 23:58, , 4F
就要這麼一丁點空間 離限制還差得遠吧XDDD
05/09 23:58, 4F

05/16 23:17, , 5F
malloc的上限通常是user address space的大小減去其他
05/16 23:17, 5F

05/17 09:02, , 6F
資料(code,stack,...)所占的記憶體空間
05/17 09:02, 6F

05/17 09:05, , 7F
64位元的user address space通常8TB,32位元是2或3GB
05/17 09:05, 7F

05/17 09:16, , 8F
不過malloc是配連續的記憶體,所以實際執行要看你程序
05/17 09:16, 8F

05/17 09:18, , 9F
當下的記憶體分布狀況
05/17 09:18, 9F
文章代碼(AID): #1LJFiIhr (C_and_CPP)