我只是想知道,在下面的场景中,“stringvar”使用的内存是否在method1完成执行后释放?
// Just some method
void method2(char* str)
{
// Allocate 10 characters for str
str = malloc(10 * sizeof(char));
}
// Just another method
void method1()
{
char* stringvar;
method2(stringvar);
// Is the memory freed hereafter, or do I need to call free()?
}
我这样问,因为如果我在method1的末尾加上一个“free(stringvar)”,我会得到一个警告,即stringvar在method1内部是统一的(这是真的)。
最佳答案
不,在method1
之后内存没有释放,因此会出现内存泄漏。是的,使用完内存后,您需要调用free
。
如果要分配内存,需要发送指向method2
指针的指针。这是C语言编程中的一个常见习惯用法,特别是当函数的返回值被保留为整数状态码时。例如,
void method2(char **str) {
*str = (char *)malloc(10);
}
char *stringvar;
method2(&stringvar);
free(stringvar);