【发布时间】:2016-06-13 13:51:06
【问题描述】:
在 C 中执行函数后(通过 malloc)释放分配的内存的正确方法是什么?我需要分配内存,以某种方式使用它并将其返回,而不是释放它。
char* someFunction(char* a, char* b) {
char* result = (char*)malloc(la + 2 * sizeof(char));
...
return result;
}
【问题讨论】:
-
char *str = someFunction(a, b); useitsomehow(str); free(str); -
嗯,这意味着我将返回指针,它可以作为“str”释放,因为它现在是完全相同的指针?
-
@JaxCze:是的,我也不会称它为“完全相同的指针”。它是一个不同的(指针)变量,具有完全相同的值,即指向同一个对象。
-
如果您返回调用者必须释放的内存(并且如果您无法避免这种情况),那么您至少应该使用如下注释说明这一点:“调用者负责释放返回内存”。
-
你没有释放一个变量,你释放了一些指针(它位于一个变量中,或者由某个函数或表达式返回) .请注意pointer aliasing。您需要定义并记录关于谁以及何时应该释放指针的约定。一些工具(例如valgrind...)可能有助于找到memory leaks