下列程序会在哪一行崩溃
来源:互联网 发布:ubuntu 文件夹映射 编辑:程序博客网 时间:2024/06/11 14:28
下面的程序在那行崩溃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;}请给出解释!
a.pc[4]=0;出错。首先要知道a的构造,这涉及内存对齐的知识,a的成员c和pc之间有3个空白字节。所以a的实际大小是8字节。char *p=&a.c;//p指向a的首地址p[0]=0;//c成员变成0p[1]=0;p[2]=0;p[3]=0;//3个空白字节变成0p[4]=0;//成员pc的第2个低位字节变成0p[5]=0;//成员pc的最低位字节变成0a.pc=p;//pc成员指向a自身的首地址a.pc[5]=0;//把pc自身的最低位字节变成0了,注意,此时,pc的值不再是a的首地址,因此变成了个野指针,指向了未知空间,导致之后的a.pc[4]=0出错
下列程序会在哪一行崩溃
struct S
{
int i;
int *p;
};
main()
{
S s;
int *p=&s.i;
p[0]=4;
p[1]=3;
s.p=p;
s.p[1]=1;//执行完该句后s.p指向地址为1的地方,s.p[0]是地址1中存放的内容。所以不能输出s.p[1], //同样也不能对s.p[]赋值
s.p[0]=2;
}--------------------------------------------------------------------先看下面的程序
#include<stdio.h>
struct S
{
int i;
int *p;
int j;
};
void main()
{
S s;
int *p=&s.i;
p[0]=4;
p[1]=3;
printf("printf("&s.i=%x\n&p[0]=%x\n&p[1]=%x\n &s.p=%x\n&s.j=%x\n&p=%x\np=%x\n", &s.i,&p[0],&p[1],&s.p,&s.j,&p,p);
}
可以看到&p和&s.p的地址不同,说明这两个p不同,另外s.p存放的值是指向的变量(常量)的地址,而*s.p才是该变量(常量)的值。在该程序中s.p和p[1]等价,赋值3给s.p或p[1]存放的是地址3,而不是变量3,此时输出*s.p就会出错,因为不能对地址3中存放的内容进行非法访问。而s.i和p[0]等价则是变量。注:*s.p不是s.p所在地址的内容,而是s.p指向的地址中的内容。s.p[0]和s.p[1]同理。------------------------------------------------------------------------------------------------故上题中最后一句会出现崩溃,因为s.p[0]中存放的地址
- 下列程序会在哪一行崩溃
- Interview Q&A - 程序会在哪一行死掉?
- 下面代码在哪一行崩溃
- 图中的“大蒜阵”,僵尸最终会死在哪一行的推车上?程序解答
- 为什么程序会在objc_msgSend() 崩溃
- 为什么程序会崩溃
- 运行下列程序,会产生的结果是
- 在unicode版本下一些mfc程序会崩溃
- 明天醒来我会在哪一只鞋子里?
- 程序执行正确, 但退出时崩溃在main() 最后一个语句之后。为什么会这样?
- 你的程序会崩溃吗?
- 下列程序运行时会崩溃,请找出错误并改正,并且说明原因
- 下列程序运行时会崩溃,请找出错误并改正,并且说明原因
- sprintf_s 在release下仍然会崩溃
- MKNetworkEngine重复调用会程序会崩溃问题
- 写出下列程序在X86 上的运行结果。
- 如果你不从事IT,那会干哪一行?
- Javascript程序应该放在html中的哪一部分
- 很好的关于Bitmap内存讨论的文章
- Linux curl 命令详解,以及实例
- 题目1352:和为S的两个数字-九度
- Round Numbers
- zoj 3687 The Review Plan I(禁为排列模板)
- 下列程序会在哪一行崩溃
- 海康威视:实时视频透雾技术在监控中的应用
- 如何让一个网站前端有气质
- SSIS备份并读取txt
- linux vi
- 博客竟然给我封掉了,有点无语
- Android 手动显示和隐藏软键盘
- xargs 常用参数
- POJ_3648题解