关于malloc的功能访谈

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:这会导致内存泄漏,程序不正确.

有谁知道为什么这段代码不起作用?

dbu*_*ush 8

在C中,所有函数参数都是按值传递的.因此,当在其中local修改局部变量时newArray,更改在函数外部不可见.所以内存指针丢失,你有内存泄漏.

到修复泄漏,该函数应该接受地址的指针(即,一个指针到指针),然后解除引用该指针,使得ptrmain被更新.然后,您需要调用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.

  • @FatemehKarimi如果您正在编译为C++,那么是的,您将收到错误.但是如果你的源文件是.c文件,那么你应该编译为C,你不应该进行这样的转换. (2认同)