[問題] 關於free()這個函數的使用
小弟程式算是新手
最近遇到一個很頭大的 free() invaild pointer 的bug
也爬過有關於free的文章百思不得其解
想來請教一下各位前輩
程式碼大略是這樣的
--
--
char *a
char *b //以上這裡是在func裡宣告兩個pointer
--
--
--
while (某個結束條件)
{
--
--
--
--
if {
裡面執行的程式碼稱作A
跟上面的兩個pointer沒有關係
}
else {
裡面執行的程式碼稱作B
a = malloc(xxx) //在這邊配置記憶體位置給這兩個pointer
b = malloc(xxx)
--
--
--
free(b) // b使用結束 free掉
--
--
free(a) // a使用結束 free掉
}
} //while 結束
架構大致上如以上,
在while裡會有A及B任意合(Ex: 可能執行兩次A再執行一次B然後跳出迴圈之類,
問題來了 :
Q: 只要我是執行B不管執行幾次最後再執行A,程式都不會有任何問題
但只要A在B之前先執行過,執行B的時候,要free(b)就會出現
free():invaild pointer的錯誤,但A理論上跟那兩個pointer完全沒有關係啊~
以上,卡了很久,請大家幫幫忙了QAQ
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.108.225
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1503251200.A.E30.html
→
08/21 01:50, , 1F
08/21 01:50, 1F
我一開始有懷疑是array超出範圍的問題仔細檢查過每個array,
不過看起來沒有什麼大問題,謝謝你的建議我會在找找看 :)
※ 編輯: Petyr (180.177.108.225), 08/21/2017 01:52:16
→
08/21 01:51, , 2F
08/21 01:51, 2F
推
08/21 02:41, , 3F
08/21 02:41, 3F
→
08/21 02:41, , 4F
08/21 02:41, 4F
→
08/21 02:42, , 5F
08/21 02:42, 5F
→
08/21 02:43, , 6F
08/21 02:43, 6F
→
08/21 02:43, , 7F
08/21 02:43, 7F
推
08/21 03:15, , 8F
08/21 03:15, 8F
→
08/21 03:16, , 9F
08/21 03:16, 9F
→
08/21 03:16, , 10F
08/21 03:16, 10F
推
08/21 03:58, , 11F
08/21 03:58, 11F
推
08/21 04:47, , 12F
08/21 04:47, 12F
→
08/21 04:47, , 13F
08/21 04:47, 13F
推
08/21 04:51, , 14F
08/21 04:51, 14F
→
08/21 04:51, , 15F
08/21 04:51, 15F
→
08/21 04:52, , 16F
08/21 04:52, 16F
推
08/21 05:51, , 17F
08/21 05:51, 17F
推
08/21 08:16, , 18F
08/21 08:16, 18F
→
08/21 08:16, , 19F
08/21 08:16, 19F
推
08/21 08:52, , 20F
08/21 08:52, 20F
→
08/21 17:08, , 21F
08/21 17:08, 21F
→
08/21 17:08, , 22F
08/21 17:08, 22F
推
08/21 17:13, , 23F
08/21 17:13, 23F
→
08/21 17:40, , 24F
08/21 17:40, 24F
噓
08/21 17:42, , 25F
08/21 17:42, 25F
→
08/21 20:47, , 26F
08/21 20:47, 26F
→
08/21 20:48, , 27F
08/21 20:48, 27F
→
08/21 23:48, , 28F
08/21 23:48, 28F
推
08/22 01:56, , 29F
08/22 01:56, 29F
→
08/22 01:56, , 30F
08/22 01:56, 30F
→
08/22 02:08, , 31F
08/22 02:08, 31F
推
08/22 04:20, , 32F
08/22 04:20, 32F
→
08/22 04:28, , 33F
08/22 04:28, 33F
→
08/23 04:40, , 34F
08/23 04:40, 34F
→
08/23 04:45, , 35F
08/23 04:45, 35F
→
08/25 12:11, , 36F
08/25 12:11, 36F
→
08/25 12:11, , 37F
08/25 12:11, 37F
→
08/25 12:12, , 38F
08/25 12:12, 38F