malloc() 和 free() 的 C 动态内存问题

标签 c memory-management memory-leaks gdb free

我动态分配了 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/

相关文章:

java - 仅使用框架布局分配大量内存

silverlight - 是否应该将 Silverlight 控件重新加载到页面上?

objective-c - 局部变量赋值与直接赋值;属性和内存

c - 如何在C程序中将矩阵的第一列元素复制到第二列

c - Linux、C、ncurses : seg fault caused by printw

c++ - 类型 'const char*' 和 'const char [93]' 的二进制操作数无效

java - 如何在 Windows 上限制打包在 jar 中的 Java 应用程序的内存使用(-Xmx 似乎不起作用)

C# 如何使我的 sqlDataReader 脱机?

java - Oracle T4CPreparedStatement 内存泄漏?

c - SOCKS5 错误 400 Tor