问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

free释放了一个结构体 但是它里面的指针却依然可以访问?? c语言

发布网友 发布时间:2022-05-18 19:27

我来回答

5个回答

热心网友 时间:2023-10-26 12:53

free函数,实际上做的事情不是真正的释放内存。
首先你要清楚,内存是由操作系统来管理的(操作包括分配、释放等)。
系统中的内存在c语言分配内存机制上被分为很多个块,c的底层代码用数据结构chunk来表示。chunk中有一个标志位,用来表示该内存块是否为待分配或者已分配状态。每一次调用malloc,这个标志位会被设置1(好像是1,记不太清楚了),调用free时被设置为0. 操作系统的内存管理机制会根据这个值来分配和释放内存。
也就是说调用free的时候,只是设置了这个标志位(当然还做了其他事,就你这个问题而言,只讨论这个),而内存还原封不动的在那里。所以,当你在系统真正释放这个内存之前再次访问这个地址,你会得到你想要的结果。
说明,“输出test1->a为0”,这个的原因可能是free的时候,设置chunk块的标志位时,覆盖了a的值。chunk数据结构中,第一个字节的前8位是标志位,后面还有24位也有各自的用处。具体是什么导致a的值为0的,你有兴趣的话,你可以自己去研究。可以去阅读linux的glibc源码。
"(*test1->next).a为10",就简单了。next偏移struct test所占内存的“头(head)”距离较远,free的时候的一些设置值的操作没有影响到,能访问到这个指针的值,并且test0还在函数栈中完整保留,自然就能访问到了。

P.S c/C++的malloc/free和new/delete都有这个特性,所以编程的时候要养成一个良好习惯,在调用free和delete的时候要将指针赋值为NULL,如:
free(ptr);
ptr=NULL;
或者
delete ptr;
ptr=NULL;

热心网友 时间:2023-10-26 12:54

只能说明你用的编译器对free()的处理有漏洞。我这里编译都通不过,删除free(test1)就可以了,输出是20 10。

热心网友 时间:2023-10-26 12:54

free()是释放堆。你的next指向的是栈的地址,当前作用域内,栈还有效,不会被释放

热心网友 时间:2023-10-26 12:55

对已释放的地址进行取值运算是一种未定义行为,编译器有可能会报错,也有可能不报错,但是你不能指望它能一直按你想的方式来运行。
你这里之所以可以显示为10,可以说是编译器的”慈悲“吧

热心网友 时间:2023-10-26 12:56

结构体内的指针无论是分配和释放空间都要独立进行,即使结构体分配了空间他也没有被分配空间
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我现在九十斤每天跑半小时可以减肥吗? 一只蛋鸡吃多少饲料 永诚财险水滴重疾2021值得推荐吗?重疾赔付次数有多少? 瑞泰保险水滴瑞选重疾险好不好?值得买吗? 水滴守护真爱重大疾病保障计划值得推荐吗?可靠吗? 去西塘和乌镇 为什么生死狙击花圣总是玩人类 江门豪江华庭带装修吗? 江门豪江华庭售楼中心电话是多少? 这种美图软件叫什么? 女主生母被害死,继母原为丫鬟。女主被 袓母带大,后来因王妃的要求与世子订婚,女主从母亲的嫁妆中 请问:struct mem { char cmd[16]; unsigned long int serial; char para[0]; }; 徐凤年身边的丫鬟都是什么身份 求一部小说男主姓萧是个世子重生的女主是男主的丫鬟比男主小后来变成了郡主 求求求!! free函数的形参是无类型指针(void *),而实参可以是别的类型的指针(比如int *或者char *)这到底为什么 男主是世子是腿部有残疾,女主重生是丫鬟 c 语言中的free 函数 用法 求一本小说 女主是一个丫鬟 重生的 上辈子是侯府世子的通房 世子姓阮 丫环成功逆袭世子妃的韩剧叫什么? 世子这么多人追求,为什么偏偏喜欢野丫头赵敏? 女主穿越成书中丫鬟女配,叫叶儿,最后和世子男配在一起 古代贴身陪嫁丫鬟怎么称呼自己嫁到王府当世子妃的主子? 有谁做过phthalate free test report free testicle exam是什么意思 古代世子可以娶丫鬟当正妻吗 phtalates free test和en71是什么测试 阅读《美猴王》全文,说说美猴王具有怎样的性格特征。__ 花果山拥立美猴王的译文!!!是虾米吗?急用!不要原文,要译文!!!!!!!!!!!! 花果山拥立美猴王 原文 剪了短发显老怎么办 纺织品azo free检测多少钱 男主是暴妄世子,女主是12岁小丫头的小说 地质学中SCI期刊有哪些? 正则表达式 求助 地质学,做矿床的sci哪个期刊好发? 女主角是厨娘,男主角是世子,男主经常带着女主参加斗厨大赛,女主对男主说她不 PU材料有哪些测试? 这5项分别是什么测试求大神解释 1)AZO DYE, 2)CADMIUM, 3) DMF FREE 4)PAHS . 5)PCP 古代奴婢怎么称呼将军的儿子 中国地质大学北京研究生发表国际sci给多少钱 国外低级别的地质类SCI有哪些 中国地质大学 邢立达 发了多少篇sci 各位学霸可否推荐几个地质类SCI灌水期刊 帮写代笔发表地质学工程EI,SCI论文 现在淘宝上卖什么比较好 出租房微波炉坏了谁维修 租房期间微波炉坏了该谁买单 租房期间微波炉坏了该谁买单?合同里没有定这方面的协议。 出租房用二手微波炉会不会有事 一种微波炉按进价提高60%定价然后打8折出售在外送30元出租费结果每台仍获利380元那么这种微波炉的进价? 几百块钱的微波炉做固定资产有什么意义 出租房内提供的家用电器发生安全事故房东应负责吗?