Calloc()是先前分配的内存

时间:2016-06-19 01:56:24

标签: c memory malloc free calloc

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

1 个答案:

答案 0 :(得分:1)

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

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 */