看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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