我只是想知道,在下面的方案中,是在执行了method1之后释放的'stringvar'所使用的内存?
// 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()?
}
Run Code Online (Sandbox Code Playgroud)
我问,因为如果我在method1的末尾添加一个'free(stringvar)',我会得到一个警告,即stringvar在method1中是单元化的(这是真的).
And*_*ton 22
不,之后内存没有被释放method1
,所以你会有内存泄漏.是的,你需要free
在使用完内存后调用.
如果要分配内存,则需要发送指向指针的指针method2
.这是C编程中常见的习惯用法,特别是当函数的返回值保留为整数状态代码时.例如,
void method2(char **str) {
*str = (char *)malloc(10);
}
char *stringvar;
method2(&stringvar);
free(stringvar);
Run Code Online (Sandbox Code Playgroud)
不,动态分配的内存不会自动为您释放.在C中,程序员有责任自由.
另外 - C通过值传递变量,str = malloc(10*sizeof(char)); 只是分配给本地'str'变量.
好像你想要返回从malloc获得的指针,所以你的程序变成:
char *method2(void)
{
// Allocate 10 characters for str
return malloc(10 * sizeof(char));
}
// Just another method
void method1()
{
char* stringvar;
stringvar = method2();
...
free(stringvar);
}
Run Code Online (Sandbox Code Playgroud)
另一个选项,如果你想从method2中操纵'stringvar',就是传递一个指向'stringvar'的指针,例如
void method2(char** str)
{
// Allocate 10 characters for str
*str = malloc(10 * sizeof(char));
}
// Just another method
void method1()
{
char* stringvar;
method2(&stringvar);
...
free(stringvar);
}
Run Code Online (Sandbox Code Playgroud)