如果指针重定向,则释放内存

时间:2014-12-23 21:08:36

标签: c pointers memory free

我在以下代码片段中了解如何正确释放内存时遇到了一些麻烦:

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);
}

现在我分配了两次不同大小的内存。但如果我做对了,我只需更改指针地址,永远不要释放内存。

我真的不知道,谷歌要找一个例子

这是正确的,我将如何改变它?

修改 我删除了函数的第二个参数。这没有必要和混乱。

3 个答案:

答案 0 :(得分:1)

在您提供的代码中,正确释放内存的方法是:

char *s2;
s2 = other_function_allocation_mem(s);
free( s );
s = s2;
...
free( s );
return ns;

答案 1 :(得分:1)

在程序中从堆中分配内存时,您必须清楚地了解:

  1. 在程序中分配堆内存的地方。

  2. 堆分配内存的所有权如何从一个功能转移到下一个功能,

  3. 在程序结束前取消分配的位置。

  4. 在您的情况下,假设function_allocating_memother_function_allocation_mem没有在输入参数上调用free,您必须确保在这两个函数中分配的内存在{ {1}}或fun

    main

答案 2 :(得分:0)

这么多问题。

1.您声明func有两个参数。然后你只用一个参数调用它。
2.您声明func返回char*,然后您尝试将其分配给char[]
数组和指针是相关的,但它们不可互换
3.在func中,您永远不会使用参数os
 4.您返回变量ns。它从未被宣布过。