PTT
Submit
Submit
選擇語言
正體中文
简体中文
PTT
C_and_CPP
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
幫你改了一下
http://pastebin.com/ngyVCidE
作者:
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時可能會有意料外的行為
繼續閱讀
[問題] 大約一半機率會記憶體錯誤的字串處理函式
deo2000
[問題] C++ name mangling問題
w0005151
[問題] c++ 印符號
jason0606
[討論] 關於讀入檔案做後續處理
jacky1989
[問題] 建.lib檔出現"Unable to start program"
psylove5566
[問題] 如果 feof()==1 還需要fclose嗎?(已補碼)
deo2000
[問題] 小於10 指定長度的各種組合
mikemagic88
[問題] VS2012+OpenCV3.1+CUDA7.5
schizophrena
[問題] vsc++ clickonce更新軟體問題
MOONY135
[問題] vfork() + exec() 相關疑問
kyuudonut
Links
booklink
Contact Us: admin [ a t ] ucptt.com