繁体   English   中英

返回已分配的变量

[英]Return an allocated variable

我知道我们应该释放任何用malloc分配的变量,但如果我在函数中返回它会怎么样? 像这样的东西:

char *somefunction(int somearg){
    char *str;

    str=(char *)malloc(sizeof(char *));

    //some code

    return str;
}

我应该免费吗? 我怎么能这样做?

你有两个选择:一个,将char *传递给某个函数并使用它而不是在某个函数中分配,或者两个,稍后释放返回值。

第一种选择:

char *somefunction(char *str, int somearg){

    //some code

    return str;
}

// Elsewhere...
char *str = (char *) malloc....;
somefunction(str, 123);
// Code...
free(str);

第二种选择:

char *somestr = somefunction(123);
// Do something...
free(somestr);

我个人建议使用第一个选项,因为当它没有在仲裁函数中分配时,更容易避免泄漏内存。

完成后你可以释放它。 没有规则说与malloc()匹配的free()必须在同一个函数中。

你应该释放所有分配的空间,但如果你返回它,因为你将在程序的其他部分使用这些内存空间,所以在你使用之后你应该释放。 查看调用该函数的代码中的每个位置,并在使用返回的值后释放空间。

如果你打算返回块的地址,你不应该释放()块,而是依赖于调用代码以后释放()它。 这叫做onwership传递。

如果在函数中释放它并返回指针,则调用代码将在尝试访问已释放的块时遇到未定义的行为。

这是一些现有函数(例如strdup()的实践,但通常是个坏主意。 要求用户了解函数调用内部发生的事情是一个不好的要求 - 想想你使用了多少函数是谁的内部隐藏对你。 一般来说,您需要让用户传入缓冲区和大小,而不是为它们分配内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM