社区
C语言
帖子详情
小问题,大智慧!
wzywatermelon
2011-08-09 02:17:37
void main()
{
int a[240];
int b[240];
int i;
for(i=0;i<200;i++)
{
for(i=0;i<2100;i++)
{
a[i]=1; //这里为什么不越界?
}
}
return ;
}
请问这段代码最后a[i]会发生什么情况,为什么运行后debug i的值为240的时候还不越界?
标题有点坑人哈~
...全文
3016
78
打赏
收藏
小问题,大智慧!
void main() { int a[240]; int b[240]; int i; for(i=0;i<200;i++) { for(i=0;i<2100;i++) { a[i]=1;//这里为什么不越界? } } return ; } 请问这段代码最后a[i]会发生什么情况,为什么运行后debug i的值为240的时候还不越界? 标题有点坑人哈~
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
78 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
烈火蜓蜻
2011-09-20
打赏
举报
回复
void main()
{
int a[240];
int b[240];
int i;
for(i=0;i<200;i++)
{
for(i=0;i<2100;i++)
{
a[i]=1; //这里为什么不越界? 因为你的运气比较好,a和b分配到了连续的空间,所以到240时没有崩溃,到500没崩,只能说,你的运气还是不错,用到没被别的程序占用的空间,系统没Kill掉你。
}
}
return ;
}
CJacky++
2011-08-19
打赏
举报
回复
[Quote=引用 36 楼 yachong 的回复:]
越界!=崩溃,这个看人品
[/Quote]
+1.
越界不一定会崩溃的。所以才可怕,因为你不知道软件什么时候会异常!!!!
CCSOY
2011-08-18
打赏
举报
回复
大智慧 or 好人品
staticabc
2011-08-18
打赏
举报
回复
[Quote=引用 18 楼 everax 的回复:]
引用 3 楼 pamtry 的回复:
只要超出你数组下标就已经越界了,只是没有报错和崩溃罢了
至于为什么没有崩溃,需要参考C运行时堆、栈结构
就是这样
我试了几遍,又把 a[i] = 1 改成 a[i] = i,又改回去了
结果是,前几遍正常运行,改过之后,错误,改回去,错误
[/Quote]
+1
DiamondCG
2011-08-18
打赏
举报
回复
看一看!
每天回帖即可获得10分可用分!
worldy
2011-08-16
打赏
举报
回复
[Quote=引用楼主 wzywatermelon 的回复:]
void main()
{
int a[240];
int b[240];
int i;
for(i=0;i<200;i++)
{
for(i=0;i<2100;i++)
{
a[i]=1; //这里为什么不越界?
}
}
return ;
}
请问这段代码最后a[i]会发生什么情况,为什么运行后debug i的值为240的时候还不越界?
标题有点坑人哈~
[/Quote]
c边界检查不负责边界检查,边界检查是你的责任!
越界后,轻则造成数据不正确,重则会引起一般保护错误
bravery36
2011-08-16
打赏
举报
回复
[Quote=引用 68 楼 sljw1986 的回复:]
其实是越界了,只不过越界的内存是不定的, 有时候是b【240】 被占用了,有时候是其他的内存空间被占用,反正这样写 很容易导致系统重启,崩溃等。
[/Quote]
这是不可能的,win2000之后内核的内存和应用层的内存已经分开管理了,越界也越不到那里。
lisongmei12
2011-08-16
打赏
举报
回复
顶一下
xunfeng_2008
2011-08-16
打赏
举报
回复
你知道越界就可以了,
为什么没有程序没有崩溃是另外一个问题,继续学习吧。
Dirk
2011-08-16
打赏
举报
回复
肯定是越界了。只是数组访问方式和指针方式的安全策越不一样。没有报错罢了,没有崩溃也是巧合而已。
菜鸟1v1
2011-08-16
打赏
举报
回复
其实是越界了,只不过越界的内存是不定的, 有时候是b【240】 被占用了,有时候是其他的内存空间被占用,反正这样写 很容易导致系统重启,崩溃等。
book2016
2011-08-16
打赏
举报
回复
越界不一定崩溃,内存崩溃一定越界
blacktea000
2011-08-15
打赏
举报
回复
越界是明显的,还用得着讨论么。别浪费时间了
jernymy
2011-08-14
打赏
举报
回复
楼主运气好,实际上已经越界了。
TOOCROWN
2011-08-13
打赏
举报
回复
这样用的应该很少吧!
sanyuegongzi
2011-08-13
打赏
举报
回复
另外,你的第一个循环是无效的,只会运行一次
执行第二层循环修改 i的值大于了200 也就是,第一层循环就执行了初始的那一次。
sanyuegongzi
2011-08-13
打赏
举报
回复
你用的vc vc为了追求极致效率而越界不检查,你如果加一行代码
输出b[0]到b[239]值会看到他们的值全是1.
甚至 b240 之后的没4个字节也被赋值成了1;
你得自己尝试,c局部语言变量在栈里面的存储方式,越过了a空间是b空间,也就是a越界以后继续给b空间赋值了。
我唯一不能理解的是,为什么我的电脑上只能输出1296个1 也没有提示,栈耗尽。
rendao0563
2011-08-12
打赏
举报
回复
就一个回答靠谱. 解释本质问题. 楼层是9的整数倍. 应该可以猜到的.
wlcbh
2011-08-12
打赏
举报
回复
这个需要调试跟踪定位
shi3590
2011-08-12
打赏
举报
回复
我只想说压栈与内存增长顺序相反,你对a进行赋值操作确实越界了,但是越界操作如果不带来内存上的错误是不会有提示的。如果想弄明白这些,建议把赋值换成b[i]=1,然后单步看看a数组元素的变化,最后再去看看函数调用规约。
加载更多回复(54)
大
智慧
服务器文件详解,大
智慧
免费用户行情服务器文件
相关简介: 大
智慧
免费用户行情服务器文件 海通的服务器,最近总被吐槽,不是上证指数成交金额不对,就是说数据有
问题
,把垃圾箱翻一下,将国泰君安的服务器翻出来用吧! 交钱买了365版本或者专业版的收费用户、直接无视、闪过; 还想继续免费玩的可以试试;当然、想免费实时收到10档、Level2、DDE数据的就别浪费时间了; 这个不是、不是、不是专业财务、财务、除权、板块服务器文件。 dzhhqserver...
macd的VB计算机程序,大
智慧
自选股实时同步到通达信VB小软件简单升级
好股票软件下载网(www.goodgupiao.com)提示:您正在下载的是:大
智慧
自选股实时同步到通达信VB小软件简单升级没有进行大的改动,只是增加了一个蜂鸣提醒功能,就是每一次同步后,电脑蜂鸣一声提醒已经有新股票过来了,个人感觉这个很方便,所以分享出来。顺便回复几个朋友使用中的
问题
:一、该软件我是在64位win7系统里用的,没有
问题
,其他系统没有试过。二、软件对大
智慧
后缀为blk和slf的自选...
python 大
智慧
接口_大
智慧
数据格式
大
智慧
day数据格式日线数据放在目录dzhDATASHaseDay以及dzhDATASZnseDay下,分别是上海和深圳。里边每个文件就是个股的数据了。每个文件一开头就是日数据,不像有些股软数据开始有一些格式。每日数据一共为40个字节。第一个四字节:日期,转换为十进制即可。第二个四字节:开盘,除以1000第三个四字节:最高,除以1000第四个四字节:最低,除以1000第五个四字节:收盘,除以100...
python读取大
智慧
数据_用Python抓取大
智慧
除权数据
继续做的数据分析,由于新浪获取的是未复权数据,所以在分析的时候出了些小
问题
,结果变得扑所迷离。于是又用了几天Tushare的获取复权数据功能,本来是写了个循环,每天自动获取,可是几乎每次下载都卡死了,这真是坑爹的网络。翻了翻Tushare的这段代码,Tushare的这个数据倒也是新浪的,但是是从网页上扒下来的,过程好像获取了两个地址的数据,貌似一个复权因子一个后复权数据,没细看了。反正我也不认为这...
python 大
智慧
接口_大
智慧
L2实时api接口
{"optioninfo":{"dynamic":"ture","static":"true"},"simplifiedDisplay":"newEdition","newCard":[{"title":"云 AP","contentLink":"https://www.aliyun.com/product/cloudap","link":"https://img.alicdn.com/tfs/T...
C语言
70,023
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章