我动态分配了 2 个不同的数组,每个数组有 100 万个单元格。一个数组保存整数,一个数组保存指向固定长度字符串的指针。当我使用 gdb 运行程序时出现错误:free(): invalid next size (fast)
。我一定是在以非法方式释放内存,但我不知道如何释放内存。我在下面发布了我使用 malloc 和 free 的代码的简短片段。你能告诉我我做错了什么吗?谢谢。
最佳答案
除了有点奇怪,(请参阅 iharob 的评论)您向我们展示的代码看起来是正确的。
错误很可能不在您向我们展示的代码中。
可能发生的情况是,您在其他地方用字符填充了您的那些“单词”,并且存储了从地址 wc->allWords[i]
开始的 20 多个字符。 .因此,您正在写入一个内存块的末尾,并越过下一个内存块的 header 。
然后,稍后,您尝试释放的 block 的地址是正确的,但是您损坏了 block 的 header ,因此 free()
失败。
关于malloc() 和 free() 的 C 动态内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39681676/