c - 使用 malloc() 和 free() 指针可能导致内存泄漏,以及与指针表示法混淆

标签 c pointers memory-leaks singly-linked-list

所以我对 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/

相关文章:

c - 当我将字符串文字分配给非常量指针时,为什么我的 C 编译器不发出警告?

c++ - 在C/C++中获取网关地址

C,为什么这段代码适用于数组表示法,但不适用于指针表示法?

python - 让 Valgrind 检测 Python 脚本 : 调用的 C++ 程序的内存泄漏

c - 如何将两个数组一起排序,其中第一个数组使用冒泡排序进行排序?

arrays - NASM - 如何制作结构指针数组并访问它们

c++ - 为什么这个指针是8个字节?

windows - 试图通过批处理文件阻止 RuntimeBroker.exe 使用过多的 CPU

java - 关闭迭代器中的 BufferedReader 以返回文件行

c - 在C中释放动态分配的内存