c - 我怎样才能释放内存?

标签 c memory memory-leaks

#include<stdio.h>
#include<stdlib.h>

int * doall() {
    int *a;
    a=(int*)malloc(sizeof(int)*2);
    a[0]=2;
    a[1]=3;
    return a;
}
int main() {
    int *arr;
    arr=doall();
    for(int i=0;i<2;i++) {
        printf("%d ",arr[i]);
    }
    printf("\n");
    free(arr);
    return 0;
}

是否可以free(a);free(arr) 是否在 doall 函数中释放“a”?

doalla=(int*)malloc(sizeof(int)*2);

最佳答案

Is it possible to free(a);

没有。当 doall 完成时,已经没有变量 a,只有它的。但是,由于此值随后被分配给 arr,因此您的程序保留对 doall 已分配的 block 的引用。

Does free(arr) deallocate a in doall function?

它不会释放a,因为在调用free时,变量a已经消失了。但是,它会释放之前分配给 a 的内存,因此不存在内存泄漏。

关于c - 我怎样才能释放内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35844588/

相关文章:

linux - Linux 中的内存请求

c++ - 当我们 "have to"在循环中将指针传递给某个函数时,如何防止内存泄漏?

javascript - 添加删除事件

ios - addSubview 上的 Objective-C 内存泄漏

c - 处理execvp的参数数组?

c - 如何使用缓冲区和 lseek 更改文件中的某些字母

c - 是否所有程序代码都加载到 text\code section\segment 内存中

c - pthread_cond_wait(&cond_t, &mutex);解锁然后锁定互斥锁?

c - 不了解 PIPE 计划

c++ - 在 for 循环中创建的对象具有相同的地址