内存管理c

use*_*534 -1 c free

所以我知道mallocs适用于堆而不是堆栈.

我有几个问题:

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

我没有看到任何自由语句,所以我假设没有任何东西被释放,所以内存泄漏是正确的?

只是为了好奇,如果我试图释放ptr,它会崩溃.如果我尝试释放它,它工作正常.

  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 **));
Run Code Online (Sandbox Code Playgroud)

slu*_*ion 6

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

要回答你的另一个问题,是的,存在内存泄漏.另外,因为ptr已经设置为指向其他地方,所以现在不可能释放它指向的原始内存,因为您不再知道原始地址.