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

时间:2016-09-24 22:52:03

标签: c memory-management memory-leaks gdb free

我动态分配了2个不同的阵列,每个阵列有100万个单元。一个数组包含整数,一个数组包含指向固定长度字符串的指针。当我使用gdb运行程序时,我收到错误: int main(void) { printf("Minimum Signed Char %d\n",-(char)((unsigned char) ~0 >> 1) - 1); printf("Maximum Signed Char %d\n",(char) ((unsigned char) ~0 >> 1)); } 。我必须以非法的方式释放记忆,但我无法弄清楚如何。我已经在下面发布了一段简短的代码片段,我正在使用malloc和free。你能告诉我我做错了什么吗?谢谢。

1 个答案:

答案 0 :(得分:2)

除了有点奇怪之外(请参阅iharob的评论),您向我们展示的代码似乎是正确的。

错误很可能不在您向我们展示的代码中。

可能发生的事情是,在其他地方你用字符填写你的那些“单词”,并且你从wc->allWords[i]的地址开始存储超过20个字符。所以,你正在写一个内存块的末尾,并在下一个内存块的标题上。

然后,稍后,您尝试释放的块的地址是正确的,但是您已经损坏了块的标头,因此free()失败。

相关问题