gpt4 book ai didi

c - C 中的堆栈内存 "leak"

转载 作者:行者123 更新时间:2023-11-30 21:32:36 25 4
gpt4 key购买 nike

考虑下面的代码段:

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

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

最佳答案

你不能这样做

 arr = malloc(sizeof(int) * 100);

就像您在代码片段中所做的那样(尝试做)。 arr 是数组类型,不允许对其进行赋值。

随后,也许值得一提的是,在非动态分配的指针上调用 free() 会调用 undefined behavior .

FWIW,动态内存分配(通常是堆)分配的内存会出现“泄漏”。对于在“堆栈”区域(由编译器)分配的变量,不需要从程序中进行管理(用于取消分配或释放)。

关于c - C 中的堆栈内存 "leak",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33026209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com