【发布时间】:2013-04-17 11:19:35
【问题描述】:
老问题,不过我还是有一些想法。
char * getarrmal(void)
{
char *str;
str = (char *)malloc(10);
str[0] = 'a';
str[1] = 'b';
str[2] = 'c';
str[3] = '\0';
return str;
}
char * getarrdef(void)
{
char *str = "hello";
return str;
}
char * getarrfix(void)
{
char str[10] = "world";
return str;
}
三个功能。前两个将返回字符串地址并将字符串存储在堆中,以便您可以继续使用它,例如 main() 函数。
在最后一个函数中,str是一个局部变量,返回的str不能使用。
我的问题是,当我返回调用前两个的函数时,我应该手动释放它们吗?很容易相信 malloc 的情况是正确的,但我不确定 char *str = "hello" 是否也是如此。
如果我使用 getarrdef() 并且不释放它的返回值,那么我会以某种方式发生内存泄漏吗?
【问题讨论】:
-
如果您分配了它,并且您没有使用
malloc(或它的表亲之一)这样做,您不会调用free。很简单。
标签: c memory heap-memory stack-memory