为什么这个程序可以编过去?
2009-08-27 21:14
363 查看
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i=10;
int entry=11;
printf("ddd:%d,%d/n",i),entry;
return 0;
}
至于运行结果是正常的可以通过看下面的修改就知道了(运行其实就是读越界了),我奇怪的是为什么这个程序可以编过去?
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i=10;
int j=9;
int entry=11;
printf("ddd:%d,%d/n",i),&entry;
entry=12;
printf("ddd:%d,%d/n",i),&entry;
return 0;
}
这个问题是原来一个更复杂的printf语句简化而来的,这个bug很难找啊。
printf("i=%d,j=%d,k=%x/n",i,j),((int)&entry); 这个语句可以编译过去,你可以看出来这句话有问题吗?
#include <stdio.h>
int main()
{
int i=10;
int entry=11;
printf("ddd:%d,%d/n",i),entry;
return 0;
}
至于运行结果是正常的可以通过看下面的修改就知道了(运行其实就是读越界了),我奇怪的是为什么这个程序可以编过去?
#include <stdlib.h>
#include <stdio.h>
int main()
{
int i=10;
int j=9;
int entry=11;
printf("ddd:%d,%d/n",i),&entry;
entry=12;
printf("ddd:%d,%d/n",i),&entry;
return 0;
}
这个问题是原来一个更复杂的printf语句简化而来的,这个bug很难找啊。
printf("i=%d,j=%d,k=%x/n",i,j),((int)&entry); 这个语句可以编译过去,你可以看出来这句话有问题吗?
相关文章推荐
- 为什么这个Java程序终止,尽管显然它不应该(而没有)?
- void prinT(Test *pT)//这个函数 这里为什么要用 我完全可以用t3.print()这样来调用类里面函数方法就可以,为何多此一举来这样一步???
- 为什么在类中可以声明这个类的变量?
- 大家用了这么久的.net有没有发现C#中可以用中文变量呀!!可用这个特性来彻底改变程序的易读性(搞笑).但其实有一个非常独特的用处的
- 程序从片内地址0开始,但为什么链接地址又设0x30000000,那不就从0x30000000开始了,反汇编可以看到不是从0开始的
- 为什么这个程序总是跑不起来,请看如下解决方案
- 写对称字母塔的时候,程序看起来都很复杂,但一步一步来,总是可以解决的!这个过程需要耐心!
- 在xp,win7下程序运行时可以修改它的文件名,不知道为什么这样,估计要看一下内核相关的内容。
- vs2008 为什么不包含#include<cstring>程序也可以通过。
- 为什么IIS无法启动,以前是可以了.而且WWW服务也启动不了提示:错误127,找不到指定程序.
- 为什么NORflash可以作为启动设备直接执行程序
- 为什么系统好像可以自动跳出这个while循环
- final对象的生命周期为什么可以超越定义这个对象的方法?
- 为什么每个请求都要有用户名密码呢,那不是每次都要查询一下了,token,表示这个用户已经验证通过了,在token有效期内,只需要判断token是否有效就可以了
- 为什么这个万年历的程序不能显示某年某月有的天数
- 帮忙看一下这个程序,为什么在调式时候调不出来
- 为什么VC中DEBUG版本可以正常运行的程序有时无法在RELEASE版本下正常运行(转)
- 为什么象网络蚂蚁这样的多线程程序可以加快下载速度?
- 这个java程序,为什么一个notify唤醒了3个wait
- 为什么c程序头文件中加#ifdef可以防止重复调用?