看板 C_and_CPP 關於我們 聯絡資訊
宣告一個class complex 內有+-*/ typedef real double; class complex { public : real Re; real Im; complex(real a, real b); complex(); complex operator+(complex); complex operator+(real); complex operator-(complex); : : }; complex Eular(real ); complex abs(complex ); 現在開始用這class做些計算 complex *y; y = (complex*)calloc(n,sizeof(complex)); : : : TF[i] = abs(y[i]) .... free(y); 編譯可過,但會掛在math.h裡面的 abs中 查找了半天,發現把free那行comment out掉就沒事 那請問為何會這樣哩QQ 是這樣我就無法free記憶體了嗎QQ thx -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.117.67.58 ※ 編輯: Carbontube 來自: 59.117.67.58 (03/21 15:52)
Bencrie:用的compiler是 ? 03/21 16:06
legnaleurc:請用new 03/21 16:38
stonehomelaa:C++請用new/delete 03/21 17:52
TConvertible:n 是否 >= i ??? 超出你配置的範圍 03/21 18:41
ast9869:依照經驗來看 超出你配置的範圍+1 03/21 20:53
Carbontube:看不懂樓上大大,超過範圍該是直接在loop內crash 03/22 03:59
Carbontube:且與free與否無關吧...? 03/22 03:59
Carbontube:怎會不free就沒事,free就crash 03/22 04:00
Ebergies:不一定 03/22 09:08
ast9869:這個就要請高手解譯為什麼了!我只知道 超過配置時會出事 03/24 01:54
ast9869:但不一定在哪裡出事!有時候可能不在 function內出事 03/24 01:55
ast9869:當在function 以外出事,這個bug就難找了 03/24 01:56
ast9869:你可能要用肉眼看 memery window的變化是不是超過當初所 03/24 01:58
ast9869:new 的範圍, 或是new 和 delete 之間的code 一行一行mark 03/24 01:59
ast9869:看看是mark 哪一行後,就沒事了,那裡肯定有問題 03/24 02:00
sunneo:我想你還是乖乖用new/delete比較好 03/24 23:15
Carbontube:沒錯,是中間迴圈超過範圍了,謝謝高手們:) 03/26 00:42