C 将内存释放到其分配区域之外
晚上好C 将内存释放到其分配区域之外,c,pointers,free,C,Pointers,Free,晚上好 在C编程语言中,我正在处理指针,我不断地得到(内核转储)错误。很明显,我的一些代码被弄乱了。下面是我正在做的一些示例代码(但不是我的实际代码)。请注意,我正在其中一个函数中返回一个本地指针 struct foo* new_foo ( ) { struct foo myfoo; return &myfoo; } void free_foo ( struct foo* myfoo ) { // pnt_var is being used on anothe
在C编程语言中,我正在处理指针,我不断地得到(内核转储)错误。很明显,我的一些代码被弄乱了。下面是我正在做的一些示例代码(但不是我的实际代码)。请注意,我正在其中一个函数中返回一个本地指针
struct foo* new_foo ( )
{
struct foo myfoo;
return &myfoo;
}
void free_foo ( struct foo* myfoo )
{
// pnt_var is being used on another part
// of the program so we can't free it yet
foo->ptr_var = NULL;
free(foo);
}
所以我的问题是,我如何通过一个函数正确地释放一段内存,而不释放该结构分配的内存(在程序的其他部分仍然是活动的)。如果有帮助的话,我正在实现列表。
myfoo
是一个堆栈分配的struct
。您可能需要动态地malloc()
结构,然后在new\u foo
像这样:
struct foo *new_foo(){ return malloc(sizeof(struct foo));}
和
free()不要那样做。也不要对堆栈上分配的内容调用free(),即使在它的生命周期内也是如此。@Raiyan不,我没有。如果free()已经是一个空值,它不是什么都不做吗?我不确定,这就是为什么我asked@user2958652NULL定义为(void*)0
,它也是一个有效地址,不能在用户代码中访问。这就是为什么我创建结构“对象”的唯一方法应该是malloc&friends?如果你想让它们在功能范围之外可用,那么是的。我相信还有另一个答案有很好的信息,但我想有人删除了它。它提到,一旦函数调用完成,本地定义的变量将自动释放,因此指向其地址的任何指针都指向随机内存。无论如何,我想选择这个答案作为最好的答案,但不知道怎么做。你的答案隐含的小细节。谢谢你的快速回答。答案下面必须有一个绿色的复选标记。。这就是你选择它的方式。