我正在开发一个 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/