malloc() 和 free() 的 C 动态内存问题
C dynamic memory problems with malloc() and free()
我动态分配了 2 个不同的数组,每个数组有 100 万个单元格。一个数组保存整数,一个数组保存指向固定长度字符串的指针。当我 运行 我的程序使用 gdb 时,我收到错误:free(): invalid next size (fast)
。我一定是在以非法方式释放内存,但我不知道如何释放内存。我在下面发布了我使用 malloc 和 free 的代码的简短片段。你能告诉我我做错了什么吗?谢谢。
除了有点奇怪,(请参阅 iharob 的评论)您向我们展示的代码看起来是正确的。
错误很可能不在您向我们展示的代码中。
可能发生的情况是,您在其他地方 filling-in 那些 "words" 有字符的人,并且您正在存储从 wc->allWords[i]
地址开始的 20 多个字符。因此,您正在写入一个内存块的末尾,并覆盖下一个内存块的 header。
然后,稍后,您尝试释放的块地址是正确的,但是您损坏了块的 header,因此 free()
失败。
我动态分配了 2 个不同的数组,每个数组有 100 万个单元格。一个数组保存整数,一个数组保存指向固定长度字符串的指针。当我 运行 我的程序使用 gdb 时,我收到错误:free(): invalid next size (fast)
。我一定是在以非法方式释放内存,但我不知道如何释放内存。我在下面发布了我使用 malloc 和 free 的代码的简短片段。你能告诉我我做错了什么吗?谢谢。
除了有点奇怪,(请参阅 iharob 的评论)您向我们展示的代码看起来是正确的。
错误很可能不在您向我们展示的代码中。
可能发生的情况是,您在其他地方 filling-in 那些 "words" 有字符的人,并且您正在存储从 wc->allWords[i]
地址开始的 20 多个字符。因此,您正在写入一个内存块的末尾,并覆盖下一个内存块的 header。
然后,稍后,您尝试释放的块地址是正确的,但是您损坏了块的 header,因此 free()
失败。