猿问

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

代码如下:
#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

繁花如伊
浏览 147回答 2
2回答

蝴蝶不菲

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

皈依舞

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