如何释放在函数中分配的内存但该函数返回地址?

时间:2014-08-03 18:31:27

标签: c memory-management

我想知道如何释放我动态分配的内存。我知道在程序终止后内存会自动释放,但是如果这个函数被用作守护进程的一部分会怎样。我相信我会有内存泄漏,不是吗?

这是代码。这是一个简单的字符串反转功能。

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <assert.h>

char *my_string_rev(char *string)
{
    // allocate memory to return the new string
    char *out = malloc (sizeof (char));

    assert(out);


    // do things here 
    // ..
    // ..

    return out;
}

int main()
{

   char *str = my_string_rev("true");

   free(str);

   return 0;
}

我已经尝试在主电话中调用free(str),以确定它无法正常工作。我是否应该担心释放my_string_rev返回的内存?

上述my_string_rev的调用确实有效。当字符串超过4个字符时。因此,当我使用&#34; stackoverflow.com a b&#34;调用该函数时,我收到此错误:

  

`./main':free()出错:下一个大小无效(快):0x088d2008 *

那是因为malloc分配吗?我应该将字符串的长度传递给malloc吗?

1 个答案:

答案 0 :(得分:1)

char *out = malloc(strlen(string) + 1);

+ 1因为strlen不计算'\0'个字符。