使用带有 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
本身的内存。
所以我对 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
本身的内存。