gpt4 book ai didi

c free() 在我调用但不在我的函数中时有效

转载 作者:太空宇宙 更新时间:2023-11-04 02:42:41 25 4
gpt4 key购买 nike

我正在学习 C,正在玩 malloc 和 free。但是由于某种原因,当我在主要的地方使用 free() 时,一切正常,但是当我把它放在我的函数中时,它却没有

  #include <stdlib.h>
#include <stdio.h>

struct st {
int number;
};
void del(struct st *s) {
if (s == NULL) return;
free(s); s = NULL;
}
int main() {
struct st *s;
s = (struct st *)malloc(sizeof(struct st));
s->number = 4;
printf("The value is: %d", s->number);
del(s);
// free(s); s= NULL;
if(s == NULL) printf("\nThe struct is removed from memory\n");
else printf("\nThe value is: %d\n", s->number);
return 0;
}

这个回声:

The value is: 4
The value is: 0

但如果我这样做:

   // del(s);
free(s); s= NULL;

有效

最佳答案

您正在将指针传递给您的函数,这意味着它只能访问该指针的本地副本。所以您的free(s) 将只释放这个本地副本。如果你想释放一个变量,它在你调用 free 的函数的范围之外,你需要通过再次取消引用(传递一个指向这个指针的指针)来访问它。

void del(struct st **s) {
if (*s == NULL) return;
free(*s);
*s = NULL;
}

应该可以正常工作。

编辑:通过del(&s)调用函数;

关于c free() 在我调用但不在我的函数中时有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30241327/

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