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