释放其分配区域之外的内存

时间:2013-11-06 02:11:19

标签: 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 another part
     // of the program so we can't free it yet
    foo->ptr_var = NULL;
    free(foo);
}

所以我的问题是,如何通过函数正确释放一段内存,而不释放该结构的已分配内存(在程序的其他部分仍然有效)。如果有帮助的话,我正在实施清单。

1 个答案:

答案 0 :(得分:0)

myfoo是分配了struct的堆栈。您可能需要动态malloc()结构,然后访问new_foo

之外的结构 像这样:

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

free() ed指针上的malloc是未定义的行为,如果你很幸运,你可以解决分段错误,如果你运气不好,在Windows 98上,你的电脑会出现蓝屏< / p>