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