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

Calloc() is asigning previously assigned memory

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

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

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