【发布时间】:2012-11-06 09:42:39
【问题描述】:
我有一个分配字符串并返回其指针的函数。直接调用其他函数时,需要释放内存吗?
例如:
char *getRow(){
char *someString = (char*) malloc(sizeof(char) * 10);
strcpy(someString , "asdqwezxc");
return someString;
}
int main(){
printf("%s", getRow());
}
在该函数中分配的内存会发生什么?有什么办法可以释放它还是我需要在使用之前将它存储到某个变量中?
【问题讨论】:
-
这正式泄漏了分配的内存。在 this 代码中,这无关紧要,因为程序在此之后立即结束,但这不是一个好习惯。
-
这是不好的做法,最好将指针作为引用传递,这样您就可以像标准库一样在函数外部分配和释放字符串。
-
如果分配大小总是像本例中那样是静态的,则始终可以使用作为参数传递的固定大小缓冲区来获取行。就像
char buf[10]; getRow(buf);一样,虽然适用的情况有限,但您必须非常注意 getRow 的调用合约。 (换句话说,对于任何复杂的事情可能都是个坏主意,除非你有更多的约束。) -
不要将
malloc的返回值投射到C:stackoverflow.com/questions/605845/… -
好的,谢谢,我只会使用参考
标签: c function memory allocation