0

晚上所有,

在 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);
}

所以我的问题是,我如何通过函数正确释放一段内存,而不释放该结构的分配内存(在程序的其他部分仍然处于活动状态)。如果有帮助的话,我正在实施列表。

4

1 回答 1

0

myfoo是分配的堆栈struct。您可能必须malloc()动态访问该结构,然后在外部访问该结构new_foo

像这样:

struct foo *new_foo(){ return malloc(sizeof(struct foo));}

并且free()在 un malloced 指针上是未定义的行为,如果你很幸运,你会遇到分段错误,如果你不走运并且在 windows 98 上,你的电脑会蓝屏

于 2013-11-06T02:14:48.093 回答