gpt4 book ai didi

在 C 中释放内存的正确方法

转载 作者:太空狗 更新时间:2023-10-29 15:41:57 28 4
gpt4 key购买 nike

所以我试图理解 C 中内存管理的整个概念,我得到了这段代码:

int main(int argc, int *argv[]) {
item *x = NULL;
x = (item *) malloc (sizeof(item));

...

free_item(&x);
}

void free_item(item **x) {
free(*x);
*x = NULL;
}

其中 item 是之前定义的结构。我感到困惑的地方是 free_item(&x); 因为当我编写 free_item(x); 并将函数更改为:

void free_item(item *x) {
free(x);
x = NULL;
}

代码的工作方式似乎与前一个相同。

那么,有什么区别吗?如果不是,有什么理由,为什么有人会发送一个结构指针上的地址给一个释放这个结构的函数?

最佳答案

是的。首先,我认为您修改后的函数中有错字。应该是:

void free_item(item *x) {
free(x);
x = NULL;
}

现在,对于差异。 free 调用将会成功,因为它所期望的只是一个在堆上动态分配的数据的“指向类型的指针”变量。

第二部分 x = NULL 将无法按预期工作。请记住,在 C 中,当将参数传递给函数时,我们总是按值传递,而不是按引用传递。您正在传递一个变量的副本,因此x = NULL 只是将临时自动分配的x 副本设置为NULL,而不是作为参数传递的实际变量。

您更改的原始函数正确地完成了这两个部分。

关于在 C 中释放内存的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26974735/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com