c-我在函数中分配内存,并返回char*,我应该如何释放它



如果我想在函数中分配内存:

char* allocate() {
char *cp = (char*)malloc(10);
...
return cp;
}

我可以使用从main()返回的cp中的内容吗?以及如何释放CCD_ 3?

我可以在main()中使用cp中返回的内容吗?

可以。

以及如何释放cp?

使用

free(cp); // Replace cp with the name of the pointer if you are using it in another function


此外,您不应在C 中投射malloc(和族)的结果

您应该始终针对malloc(3)的失败进行测试,所以至少要使用perror(3;出口(3)类似:

char *cp = malloc(10);
if (!cp) { perror("malloc"); exit(EXIT_FAILURE); };

一些Linux系统正在启用内存过度使用。这是一个应该禁用的脏功能

如果你正在认真编码(例如,一个供其他人使用的健壮库),你可能需要提供更复杂的内存不足错误恢复(也许有一个约定,每个分配例程都可能在失败时返回NULL)。YMMV。

实际上,在稍后的某个时刻,您需要使用cp中的指针调用free(3)。如果你不这样做,你的内存就会泄漏。之后,您不允许使用,即取消引用该指针(注意指针别名)或简单地将其与其他指针进行比较;这将是未定义的行为。

有一个关于何时以及由谁调用free的约定非常重要。你应该把这个约定记录下来。定义和实施这样的约定并不总是那么容易。

在Linux上,您有非常有用的工具来帮助C动态内存分配:valgrind,将-Wall -Wextra -g(用于获取所有警告和调试信息)传递给GCC编译器,将-fsanitize=address传递给最近的gcc,等等

另请阅读有关垃圾收集的内容;至少为了获得一些术语,比如引用计数。在一些C应用程序中,您稍后可能希望使用Boehm的保守GC。

1。我可以在main()中使用cp中返回的内容吗

可以。动态分配内存(堆上)的作用域和生存期不限于函数作用域。它在free()d.之前一直有效

注意:始终检查malloc()是否成功,不要强制转换其返回值

2.以及如何释放cp

使用内存后,可以从main()或任何其他函数调用free(<pointer>);,其中<pointer>是收集allocate()返回值的变量。

相关内容

  • 没有找到相关文章

最新更新