为了账号安全,请及时绑定邮箱和手机立即绑定

结构体里的变量a已经被free释放掉了,而test1的指针next却还可以被访问?

结构体里的变量a已经被free释放掉了,而test1的指针next却还可以被访问?

PHP C
繁花如伊 2023-04-01 18:14:51
代码如下:#include <stdio.h>#include <stdlib.h>struct test {int a;struct test *next;};int main(){struct test test0={10};struct test *test1 = (struct test *)malloc(sizeof(struct test));test1->a=20;test1->next = &test0;free(test1);printf("%d %d",test1->a,(*test1->next).a); }输出test1->a为0 ,(*test1->next).a为10
查看完整描述

2 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

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

查看完整回答
反对 回复 2023-04-03
?
皈依舞

TA贡献1851条经验 获得超3个赞

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

查看完整回答
反对 回复 2023-04-03
  • 2 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信