使用带有 malloc() 和 free() 的指针可能会导致内存泄漏,并与指针表示法混淆

possible memory leak using pointers with malloc() and free(), and confusion with pointer notation

所以我对 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 的 space,还是释放到 old 指向的地址?也许正确的做法是 free(*old)?此代码会导致内存泄漏吗?

此外,如果这释放了分配给 old 的内存,那么 free(&old) 的效果如何?

从您展示的内容来看,内存管理似乎正常并且似乎没有泄漏内存。

Am I freeing the space allocated to the pointer old

是的,代码解除分配,释放内存 old 指向,通常称为 内存被分配给指针


free(*old) 不会工作,因为它不会编译,因为您试图将 struct 传递到需要指针的位置。

free(&old) 不会工作,因为它会引发未定义的行为,因为代码试图释放在堆栈上分配的内存,即指针变量 old 本身的内存。