Calloc() 正在分配先前分配的内存

标签 c memory malloc free calloc

我正在开发一个 C 项目,事实证明,在特定时刻,我调用了 calloc() 函数,它分配了一个已在使用中的内存块。这怎么可能?我检查了我的内存分配使用情况,每次调用 malloc/calloc 时,我都会调用 free(pointer_to_the_allocated_memory) 。因此,这不是内存泄漏问题,也不是两次释放的指针问题。 我没有粘贴我的代码,因为它是为了大学工作而我还没有发送。 欢迎任何类型的帮助/建议。 提前致谢。

最佳答案

两个指针有可能指向同一个地方。

p1 = malloc(sizeof(int));
/* ... */
p2 = p1;
/* ... */
free(p1);
/* ... */
p3 = malloc(sizeof(int)); /* may allocate the block already used by p2 */

请注意,它通常并不那么明显。它可能通过指针算术(即 p2++)发生,或者不同的部分可以在不同的函数中完成。

另一种可能性是您在没有注意到的情况下释放了指针:

p1 = malloc(sizeof(int));
foo(p1); /* this function calls free(p1) */
p2 = malloc(sizeof(int)); /* may allocate the block already used by p1 */

关于Calloc() 正在分配先前分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37903271/

相关文章:

c - 信号量的3个线程和消费者生产者问题

arrays - 我正在尝试使用 rand() 从数组中打印随机字符

c - 代码段的动态重定位

c - 如何将目录名称正确存储到链表中?

c malloc 分配内存时断言失败

C 未初始化局部变量错误

javascript - "JavaScript heap out of memory"传输大文件时

matlab - 使用 MATLAB R2012a 生成 2 MB 向量时出现内存不足错误

php - 处理MySQL查询结果时如何限制PHP内存使用?

c - 当您传递已分配的值指针时,究竟会发生什么?