Re: [問題] 大約一半機率會記憶體錯誤的字串處理函式

作者: deo2000 (800IM)   2016-10-06 13:47:12
感謝各位建議
目前修改過以後,還是會有3成機會在某一行出錯
如果程式很久才跑一次就正常,密集重複執行就比較可能會出錯。
程式碼
http://pastebin.com/BRZNwk0Q
只要出錯就是固定在 while 的第2行, realloc 那邊
錯誤訊息: free(): invalid next size (normal): 0x000000000076d7e0
作者: stupid0319 (徵女友)   2016-10-06 13:57:00
作者: pttworld (批踢踢世界)   2016-10-06 13:59:00
realloc的參數和回傳值可以嘗試不同變數。
作者: x000032001 (版廢了該走了)   2016-10-06 14:56:00
其他地方沒有非法存取嗎..這heap被寫爆了我指的是 有可能其他地方寫壞 只是這裡剛好free才爆炸
作者: LPH66 (-6.2598534e+18f)   2016-10-06 21:39:00
strncpy 在你給的大小到達時「不會」把結尾的'\0'寫進去不像 strncat 是會幫你加 '\0' 結尾的因此 strncpy 那行製造了一個沒有結束的字串, 問題應該在這如果你真的確定你計算的空間是足夠的, 那可以不需要 n 版直接用普通的 strcpy / strcat 即可
作者: stupid0319 (徵女友)   2016-10-07 01:27:00
如果是大約固定長度字串,沒必要用calloc來申請空間或者申請一次空間就好,不要一直calloc一直free
作者: dragon0414 (天草)   2016-10-14 14:33:00
有先確保realloc要到的空間有被清為0嗎? 如果有殘值,在操作strncpy & strncat時可能會有意料外的行為

Links booklink

Contact Us: admin [ a t ] ucptt.com