【发布时间】:2015-02-22 01:07:44
【问题描述】:
在下面的 coden-p 中,我在理解如何正确释放内存时遇到了一些麻烦:
char *func(char* s){
/* do something with s */
// pass s to function, create new string, return this string
s = function_allocating_mem(s);
// pass s to function, create new string, return this string
s = other_function_allocation_mem(s);
/* do other stuff again */
return s;
}
int main(void){
char str[] = "somestring";
str = func(str);
}
现在我分配了两次不同大小的内存。但如果我做对了,我只是改变指针地址,永远不会释放内存。
我真的不知道,要谷歌找到一个例子
这是正确的,我将如何改变它?
编辑: 我删除了函数的第二个参数。这没有必要也不会令人困惑。
【问题讨论】:
-
str = func(str);根据您的函数声明没有意义。 -
您需要确定传递的指针是否需要始终动态分配(在您的示例中不是这种情况),或者您需要传入一些指示指针是否为动态的指示符记忆。此外,如果您要释放传入的指针(即,函数获取指针的所有权),那么在释放它之前您不能丢弃它。
-
function_allocating_mem和other_function_allocation_mem只是分配新内存还是他们也调用free(s)? -
通过声明
char str[] = "...",您有一个标签str,编译器将其替换为一个常量值(地址)。声明此变量后,您无法更改此值。