所以我对 C 还比较陌生,我试图为单链表编写代码。
这是我为从列表开头删除节点而编写的内容。
int delete(struct node **head)
{
int x = -1;
if(*head != NULL) {
struct node *old = *head;
(*head) = (*head)->next;
x = old->data;
free(old);
}
return x;
}
我对 free()
函数感到困惑。我是释放分配给指针old
的空间,还是将其释放到old
指向的地址?也许正确的做法是free(*old)
?这段代码会导致内存泄漏吗?
此外,如果这释放了分配给 old 的内存,那么在这种情况下 free(&old)
会产生什么效果?
最佳答案
从您所显示的情况来看,内存管理似乎正常,并且似乎没有泄漏内存。
Am I freeing the space allocated to the pointer old
是的,代码解除分配,释放old
指向的内存,这通常称为分配给指针的内存。
free(*old)
不起作用,因为它无法编译,因为您试图将 struct
传递到需要指针的位置。
free(&old)
不起作用,因为它会引发未定义的行为,因为代码试图释放在堆栈上分配的内存,即指针变量的内存 旧的
本身。
关于c - 使用 malloc() 和 free() 指针可能导致内存泄漏,以及与指针表示法混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36957629/