看板 C_and_CPP 關於我們 聯絡資訊
找到問題了...但還是不知道為什麼 function A(..., int* x, ...){ AAA* node = (AAA*) malloc( sizeof(AAA) ); ... } function B(...){ int* x; *x = 0; function A(... , x, ...); ... } 問題是出在x (錯的有點離譜XD int x; x = 0 function A(..., &x, ...); 這樣才對 但是不知道為什麼會在malloc出現錯誤= = ============================================================= typedef struct aaa{ int x; struct aaa* y; }AAA; AAA* node = (AAA*) malloc( sizeof(AAA) ); 這行會 Segmentation fault 用GDB backtrace #0 0x00007ffff7ad4726 in ?? () from /lib/libc.so.6 #1 0x00007ffff7ad558e in malloc () from /lib/libc.so.6 不懂這什麼意思 卡在這裡很久了 請問要怎麼解決這個問題呢? http://www.lslnet.com/linux/f/docs1/i46/big5317950.htm google到這個,跟我問題似乎很像,但還是不知道怎麼解...= =" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.142.179.78
loveme00835:我怎麼覺得是你 node->y 的地方有錯 08/28 23:26
QQ29:雖然不懂問題 但這樣寫看似很正確阿?正確寫法還會有機會錯嗎! 08/28 23:27
QQ29:如果這樣好恐怖的感覺 是什麼原因造成這樣的阿 08/28 23:28
purpose:GDB 那裡應該是指 malloc 函數執行時出錯,久沒用 GDB 08/28 23:29
purpose:malloc 的參數改成別的值試試 08/28 23:30
deepking:有把size改成數字也是會錯... 08/28 23:35
※ 編輯: deepking 來自: 220.142.179.78 (08/28 23:36)
deepking:會是之前已經malloc太多嗎? 2XXXX bytes 08/28 23:41
※ 編輯: deepking 來自: 220.142.179.78 (08/29 00:14)
clanguage:兩個都不對...囧 08/29 00:18
clanguage:區域變數離開 function 就被釋放了 08/29 00:19
變數X是在更前面的function,偷懶XD 用迴圈 call B, B在call C
loveme00835:int* x; 這個指標沒有指向某個變數,垃圾值是不能拿來 08/29 00:58
loveme00835:dereference 的,新手十二誡之三 08/29 00:59
peefly:func.A裡面,參數帶入了x,但卻完全沒拿來用?! 08/29 01:13
sorry,只把部份 code 打出來
tinlans:malloc() 這種東西會出錯,唯一可能性就是之前破壞 heap 08/29 01:37
tinlans:又或者說,是破壞 heap management 用途的結構。 08/29 01:37
tinlans:就像你不小心 pointer 亂指把 linked list 的 next 指到 08/29 01:38
tinlans:莫名其妙的地方去,當下還不會出錯。但是後來你單純只是 08/29 01:38
tinlans:順順地從 list 的頭走到尾,就出事了。 08/29 01:38
tinlans:修上上句:「把 linked list 內某個 node 的 next 指到」 08/29 01:39
sunneo:會把程式碼debug到這地步 我想程式已經相當龐大了 08/29 01:40
sunneo:也許是你假設一個struct的field有資料 於是你用了他且free 08/29 01:44
sunneo:但事實上從沒將該field assign資料過 08/29 01:45
一開始是 int* x; x = 0; (換成*x=0; 錯就跑到這行了 所以是這樣破壞heap ? ※ 編輯: deepking 來自: 220.142.178.127 (08/29 08:38)
clarkman:你用位置0的指標X進去,有要做什麼嗎? 08/29 09:57
clarkman:打錯,不是位置零,但你沒有賦予位置,還去把他設值 08/29 09:59
clarkman:可能會記憶體存取錯誤 08/29 09:59
loveme00835:就像t大所說, x可能指到malloc管理記憶體會用到的欄位 08/29 10:15
loveme00835:因為他是垃圾值, 所以只是「可能」,所以造成malloc無 08/29 10:16
loveme00835:法正常運作 08/29 10:17
cobrasgo:aaa的宣告拿來看一下唄 08/30 22:20
cobrasgo:眼殘囧 08/30 22:21