use*_*783 2 c malloc pointers memory-leaks function
我在接受公司采访时遇到了一个问题,我无法弄清楚答案的原因.
void newArray(int* local, int size)
{
local = (int*) malloc( size * sizeof(int) );
}
int main() {
int* ptr;
newArray(ptr, 10);
}
Run Code Online (Sandbox Code Playgroud)
Ans:这会导致内存泄漏,程序不正确.
有谁知道为什么这段代码不起作用?
在C中,所有函数参数都是按值传递的.因此,当在其中local修改局部变量时newArray,更改在函数外部不可见.所以内存指针丢失,你有内存泄漏.
到修复泄漏,该函数应该接受地址的指针(即,一个指针到指针),然后解除引用该指针,使得ptr在main被更新.然后,您需要调用free以释放内存.
void newArray(int **local, int size)
{
*local = malloc( size * sizeof(int) );
}
int main() {
int* ptr;
newArray(&ptr, 10);
free(ptr);
}
Run Code Online (Sandbox Code Playgroud)
另外,不要转换返回值malloc.