鱼C论坛

 找回密码
 立即注册
查看: 1659|回复: 6

关于内存回收的问题

[复制链接]
发表于 2021-8-12 22:21:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
//声明节点结构
typedef struct Link {
    int  elem;//存储整形元素
    struct Link *next;//指向直接后继元素的指针
}link;
//创建链表的函数
link * initLink() {
    link * p = (link*)malloc(sizeof(link));//创建一个头结点
    link * temp = p;//声明一个指针指向头结点,用于遍历链表
    int i = 0;
    //生成链表
    for (i = 1; i < 5; i++) {
        //创建节点并初始化
        link *a = (link*)malloc(sizeof(link));
        a->elem = i;
        a->next = NULL;
        //建立新节点与直接前驱节点的逻辑关系
        temp->next = a;
        temp = temp->next;
    }
    return p;
//程序中使用malloc申请了内存,用*a指向这个内存地址,但是这个指针算是局部变量,这样函数运行以后不会自动释放了这块内存吗?
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-12 22:39:46 | 显示全部楼层
局部变量被释放了  跟你内存之内malloc的东西存在不冲突啊
只不过是没有指针指向你malloc的内存空间而已  但是它还是存在的  
所以我说  死是死  七窍流血是七窍流血  不能混为一谈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-12 22:49:01 | 显示全部楼层
这是两块内存,变量 a 是一块内存,malloc 申请的是一块内存
函数结束,变量 a 的那一块内存自动释放了,malloc 的那一块内存没有释放,malloc 申请的内存是不会自动释放的,除非调用 free 函数
当然,如果程序结束的话,操作系统会把程序用到的全部内存回收
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-12 22:50:32 | 显示全部楼层
这就好比房子的产权,产权到期后,国家可能对其进行拆迁,但是土地还在啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-13 23:39:14 | 显示全部楼层
lei1996 发表于 2021-8-12 22:39
局部变量被释放了  跟你内存之内malloc的东西存在不冲突啊
只不过是没有指针指向你malloc的内存空间而已   ...

感谢。只是不明白楼下回复的一句话:“当然,如果程序结束的话,操作系统会把程序用到的全部内存回收”。
那到底是不是要free呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-14 00:22:45 | 显示全部楼层
“当然,如果程序结束的话,操作系统会把程序用到的全部内存回收”
你可以理解为  你的代码只有在  运行的时候才会调用内存等资源   一旦运行完成的话会有操作系统善后  把你代码运行时用到的资源全部释放掉  保证内存不会越用越少
按道理来说    如果你开辟的内存不用时  是一定要提前free的防止内存泄漏(虽然有时不free好像也没啥事,但是最好养成好习惯)
举个简单栗子:如果你一直malloc申请内存  而不free不用的资源时  会导致能用的内存空间越来越少  可能就会在你代码运行的过程中产生内存溢出的错误  而等不到你的代码结束了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-14 00:31:20 | 显示全部楼层
按道理来说   对于你malloc的内存 如果不用的时候  一定要free掉(虽然有时不free也没啥大影响,但是最好有个好习惯)
当然,如果程序结束的话,操作系统会把程序用到的全部内存回收
这句话简单点说  就是代码在 运行 的时候会申请内存资源啥的   等到代码运行结束  操作系统会将你代码运行时申请的内存资源总的释放掉 顺便替你擦擦不free的屁股
但是极端情况下就会出错  栗子:如果你一直malloc内存  而不free不用的内存   可能导致代码在运行时就内存溢出  从而出错  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 14:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表