我在以下代码片段中了解如何正确释放内存时遇到了一些麻烦:
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);
}
现在我分配了两次不同大小的内存。但如果我做对了,我只需更改指针地址,永远不要释放内存。
我真的不知道,谷歌要找一个例子
这是正确的,我将如何改变它?
修改 我删除了函数的第二个参数。这没有必要和混乱。
答案 0 :(得分:1)
在您提供的代码中,正确释放内存的方法是:
char *s2;
s2 = other_function_allocation_mem(s);
free( s );
s = s2;
...
free( s );
return ns;
答案 1 :(得分:1)
在程序中从堆中分配内存时,您必须清楚地了解:
在程序中分配堆内存的地方。
堆分配内存的所有权如何从一个功能转移到下一个功能,
在程序结束前取消分配的位置。
在您的情况下,假设function_allocating_mem
和other_function_allocation_mem
没有在输入参数上调用free
,您必须确保在这两个函数中分配的内存在{ {1}}或fun
。
main
答案 2 :(得分:0)
这么多问题。
1.您声明 func
有两个参数。然后你只用一个参数调用它。
2.您声明func
返回char*
,然后您尝试将其分配给char[]
。
数组和指针是相关的,但它们不可互换击>
3.在 func
中,您永远不会使用参数os
。
4.您返回变量ns
。它从未被宣布过。