struct
{
char c;
char *pc;
} a;
int main(int argc, char* argv[])
{
char *p=&a.c;
p[0]=0;
p[1]=0;
p[2]=0;
p[3]=0;
p[4]=0;
p[5]=0;
a.pc=p;
a.pc[5]=0;
a.pc[4]=0;
a.pc[3]=0;
a.pc[2]=0;
a.pc[1]=0;
a.pc[0]=0;
return 0;
}
我知道在哪崩溃,想知道为什么?请高手赐教!谢谢!
我用手机上的网,没法给你调试,不过我认为在p[5]=0出的问题,a.pc[5]=0也是不对的。 a是结构体变量,这个结构体有一个字符变量.c,一个字节,有字符指针pc,四个字节,总共5个字节。指针p指向a.c,就说明p指向a的首地址〔a的首地址与a.c一致〕p[0]指向a的第一个空间,致为零没问题,其他也是,可到了p[5]就越界了,这可是指向a后面的第六个字节,已经不属于a变量,如果这个空间是代码的空间,改了不出问题才怪。a.pc[5]=0也是,都是指向一个空间,都是有问题的。 顺便说一下,越界存储不一定会出问题,有些空间被改变是没事的,但有些空间,比如代码区和系统区,非法改了可能就会出问题了,所以编程最好不要出现访问越界。而你的程序出问题就是刚好修改到你不该修改的数据,才出的问题,要是在特殊的情况下,其实即使越界访问,也不会有问题的,不过这才是隐患,应该排除才是。
崩溃非常严重,都是没有分配内存。如:
p[0]=0;
p[1]=0;
p[2]=0;
p[3]=0;
p[4]=0;
p[5]=0;
a.pc=p;
a.pc[5]=0;
a.pc[4]=0;
a.pc[3]=0;
a.pc[2]=0;
a.pc[1]=0;
a.pc[0]=0;
怎么会有p[0]呢?其它都一样
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息