我只是想知道,在下面的场景中,'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);
关于c - 像这样超出范围会释放关联的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1322884/