堆栈内存"泄漏"在C中

fyq*_*h95 -5 c memory-leaks memory-management

考虑以下代码段:

void f() {
    int arr[10];
    arr = malloc(sizeof(int) * 100);
    for (int i = 0 ; i < 100 ; i++) {
        printf("%d ", arr[i]);
    }
    puts("");
    free(arr);
}
Run Code Online (Sandbox Code Playgroud)

arr[10]当函数f返回时,是否会释放原始堆栈内存?(或者这是堆栈内存泄漏?)

Sou*_*osh 7

你做不到

 arr = malloc(sizeof(int) * 100);
Run Code Online (Sandbox Code Playgroud)

就像你在你的代码片段中完成(试图做)一样.arr是数组类型,不允许赋值.

随后,也许值得一提,调用free()非动态分配的指针会调用未定义的行为.

FWIW,"泄漏"进入了由动态内存分配(通常是堆)分配的内存.对于在"堆栈"区域(通过编译器)分配的变量,不需要从程序中管理(用于解除分配或释放).