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返回时,是否会释放原始堆栈内存?(或者这是堆栈内存泄漏?)
你做不到
arr = malloc(sizeof(int) * 100);
Run Code Online (Sandbox Code Playgroud)
就像你在你的代码片段中完成(试图做)一样.arr是数组类型,不允许赋值.
随后,也许值得一提,调用free()非动态分配的指针会调用未定义的行为.
FWIW,"泄漏"进入了由动态内存分配(通常是堆)分配的内存.对于在"堆栈"区域(通过编译器)分配的变量,不需要从程序中管理(用于解除分配或释放).
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |