gpt4 book ai didi

c - 内存管理c

转载 作者:行者123 更新时间:2023-11-30 18:19:10 26 4
gpt4 key购买 nike

所以我知道 malloc 适用于堆而不是堆栈。

我有几个问题:

这些代码是否被分配或释放?

我没有看到任何空闲语句,因此我假设没有释放任何内容,因此存在内存泄漏,正确吗?

出于好奇,如果我尝试释放 ptr,它就会崩溃。如果我尝试释放 handle ,它工作得很好。

  int num;
int *ptr;
int **handle;

num = 14;
ptr = (int *)malloc(2 * sizeof(int));
handle = &ptr;
*ptr = num;
ptr = #
handle = (int **)malloc(1 * sizeof(int **));

最佳答案

是的,此代码使用 malloc 调用分配内存。当您最后尝试释放 ptr 时,您会看到崩溃,因为它被重新分配给 &num,它在堆栈上分配且无法释放。取消分配堆栈变量不仅没有意义(因为无论如何它都会在函数退出时被丢弃),而且这样做也是不合法的,因为它尚未被显式分配。您仍然可以释放handle,因为它仍然指向为其分配的堆本地存储。

回答你的另一个问题,是的,存在内存泄漏。此外,由于 ptr 已被设置为指向其他位置,因此现在无法释放它指向的原始内存,因为您不再知道原始地址。

关于c - 内存管理c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14933676/

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