Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我应该在哪里调用Free()函数?_C - Fatal编程技术网

C 我应该在哪里调用Free()函数?

C 我应该在哪里调用Free()函数?,c,C,例如: 在A.c 在不列颠哥伦比亚省: 我应该在A.c或B.c中的init()方法中调用free吗?free在您不再需要或不再需要分配的内存时,即当您完成树头和树节点时,会被调用。在init()中释放内存是愚蠢的,因为您还没有用它做任何事情。free在您不再需要或需要分配的内存时被调用,即当您处理完树头和树节点时。在init()中释放内存是愚蠢的,因为您还没有对它做任何操作。这里没有硬性规定,除非您可以在init()返回之前调用free(),因为这样返回指针将无效 这是一个C++如何更好地

例如:

在A.c


在不列颠哥伦比亚省:



我应该在A.c或B.c中的init()方法中调用free吗?

free
在您不再需要或不再需要分配的内存时,即当您完成树头和树节点时,会被调用。在
init()
中释放内存是愚蠢的,因为您还没有用它做任何事情。

free
在您不再需要或需要分配的内存时被调用,即当您处理完树头和树节点时。在
init()
中释放内存是愚蠢的,因为您还没有对它做任何操作。

这里没有硬性规定,除非您可以在init()返回之前调用free(),因为这样返回指针将无效


<>这是一个C++如何更好地处理这种事情的好例子。如果必须使用C,则可以从任意位置调用free(),这取决于最合理的方法。

这里没有硬性规定,除了可以在init()返回之前调用free(),因为返回指针将无效


<>这是一个C++如何更好地处理这种事情的好例子。如果必须使用C,则可以从任意位置调用free(),这取决于最合理的方法。

我将在a.C中定义一个函数:

void freeHead(Head head){
   free(head->Root);
   free(head);
   return;
}
然后在不列颠哥伦比亚省的适当地方称之为:

freeHead(head);

我将在a.c.中定义一个函数:

void freeHead(Head head){
   free(head->Root);
   free(head);
   return;
}
然后在不列颠哥伦比亚省的适当地方称之为:

freeHead(head);

我将把
free()
调用放在执行相应
malloc()
/
calloc()
调用的模块中。在您的例子中,“A.c”提供了一个为
对象分配内存的函数。应该有一个相应的功能来删除以前也在“a.c”中分配的内存

当我是非标准库的消费者时,从非标准库(即第三方代码)中释放给我的内存对我来说没有意义。可能有其他分配给该对象的内存我不一定有权访问,尤其是对于

e、 g

MyType.c:

typedef struct _MyType
{
    char *name; /* fields are "private" */
    ...
} *MyType; /* opaque type "MyType" */

MyType MyType_create(void)
{
    MyType ret = malloc(sizeof *ret);
    ret->name = malloc(...);
    return ret;
}

void MyType_delete(MyType obj)
{
    free(obj->name);
    free(obj);
}
方案c:

typedef void *MyType;

int main(void)
{
    MyType obj1 = MyType_create(); /* we have an "instance" of MyType */
    MyType_delete(obj1);           /* delete it */

    MyType obj2 = MyType_create(); /* we have an "instance" of MyType */
    free(obj2);  /* uh oh, what happened to the memory allocated for obj2->name? leak */
}

另请参见另一个。

我将把
free()
调用放在执行相应
malloc()
/
calloc()
调用的模块中。在您的例子中,“A.c”提供了一个为
对象分配内存的函数。应该有一个相应的功能来删除以前也在“a.c”中分配的内存

当我是非标准库的消费者时,从非标准库(即第三方代码)中释放给我的内存对我来说没有意义。可能有其他分配给该对象的内存我不一定有权访问,尤其是对于

e、 g

MyType.c:

typedef struct _MyType
{
    char *name; /* fields are "private" */
    ...
} *MyType; /* opaque type "MyType" */

MyType MyType_create(void)
{
    MyType ret = malloc(sizeof *ret);
    ret->name = malloc(...);
    return ret;
}

void MyType_delete(MyType obj)
{
    free(obj->name);
    free(obj);
}
方案c:

typedef void *MyType;

int main(void)
{
    MyType obj1 = MyType_create(); /* we have an "instance" of MyType */
    MyType_delete(obj1);           /* delete it */

    MyType obj2 = MyType_create(); /* we have an "instance" of MyType */
    free(obj2);  /* uh oh, what happened to the memory allocated for obj2->name? leak */
}

另请参见另一个。

当您使用完内存时,您应该调用free当您使用完内存时,您应该调用free
Head
已经是指针类型,因此我认为您不需要&,正确的原型是
void freeHead(Head Head)
Head
已经是指针类型,所以我认为您不需要&,正确的原型是
void freeHead(Head-Head)