游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4632|回复: 14

天!我的C++编辑器(VC.net)突然可以数组越界了,拜托大家

[复制链接]

39

主题

102

帖子

102

积分

注册会员

Rank: 2

积分
102
发表于 2006-3-19 23:44:00 | 显示全部楼层 |阅读模式

绝对不是哗众取宠,不过真的是活见鬼了。


int main()
{
     int a[8];

      a[99] = 76;
   
      cout<< a[99] <<'\n';
}

显示结果:76

居然什么事情都没有,很正确的显示是 76 ,一共 a 数组有8个元素,a[99]赋值应该肯定错误,我记得我刚用VC写游戏程序的时候经常发生数组越界的错误,给我印象很深的,但最近我的VC编辑器好像数组越界也没有关系了,真是活见鬼了。

//---------------------------------------

还有,用动态分配也一样,真是神了,一共为int型指针变量分配了一个单位的内存,但是用a[99]什么事情都没有,要是以往造就错误退出了。

int main()
{
     int* a = new int;

      a[99] = 76;
   
      cout<< a[99] <<'\n';
}

大家遇到过这样的情况吗?拜托帮忙想一下是怎么回事?

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2006-3-20 08:46:00 | 显示全部楼层

Re:天!我的C++编辑器(VC.net)突然可以数组越界了,拜托大

现在没出错不代表以后也不会出错,还是自己小心,别指望编译器去找运行时错误

39

主题

102

帖子

102

积分

注册会员

Rank: 2

积分
102
 楼主| 发表于 2006-3-20 09:17:00 | 显示全部楼层

Re:天!我的C++编辑器(VC.net)突然可以数组越界了,拜托大

可是应该马上出现错误才对啊!

数组越界是C++中很严重而且常见的一个错误啊!晕!

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2006-3-20 10:02:00 | 显示全部楼层

Re:天!我的C++编辑器(VC.net)突然可以数组越界了,拜托大

Debug版本一般情况下一定会报错,你的可是?

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2006-3-20 10:03:00 | 显示全部楼层

Re:天!我的C++编辑器(VC.net)突然可以数组越界了,拜托大

动态分配的才是尤其可能越界的,越界后的那个值,看你机品了,如果是没有用到的空内存地址,那就暂时没啥事,而且只是暂时。

3

主题

29

帖子

29

积分

注册会员

Rank: 2

积分
29
发表于 2006-3-20 11:30:00 | 显示全部楼层

Re:天!我的C++编辑器(VC.net)突然可以数组越界了,拜托大

事实真相是楼主用的release编译的。
C++ 语言本身是不会做任何运行时检查的。
用debug版本,是附加的库做数组越界检查。
     int* a = new int;
      a[99] = 76;
指针这样用系统不会视为错误,这样一个指针的语义本来就只是指向一个地址,并且附带用int解释由其读出的数据。所以怎么用都是对的。
如果对自己没有信心的话,建议先用下stl之类的,那里可以得到一些额外的检查,同样也比较有效率。

39

主题

102

帖子

102

积分

注册会员

Rank: 2

积分
102
 楼主| 发表于 2006-3-20 11:53:00 | 显示全部楼层

Re:天!我的C++编辑器(VC.net)突然可以数组越界了,拜托大

我特地看了VC的属性设置,是Debug编译方法,不是Release啊!

天,我现在对VC都有点害怕了,怎么数组越界一样没事,那动态分配数组还有什么意义?

比如游戏中有50个Npc人物,用动态分配的方法定义50个CNpc类的对象,我一直这么用

CNpc* npc = new CNpc[50];

如果数组越界不会出错的话,new 后面的括号里([])的50还有什么意义呢?随便添一个23不是也可以?或者是CNpc* npc = new CNpc;反正一样使用。

我记得数组超出自己定义的范围一个也不行的(int a[50];  使用第51个元素a[50]肯定应该是错误的),现在怎么都乱了,天!

各位大侠帮忙啊!救救小弟。拜托了。

132

主题

1341

帖子

1341

积分

金牌会员

Rank: 6Rank: 6

积分
1341
发表于 2006-3-20 13:04:00 | 显示全部楼层

Re:天!我的C++编辑器(VC.net)突然可以数组越界了,拜托大

引用别人的回复:
whb9633:
你好无聊啊.
用release模式,再在array下面写点其它代码就会抛出异常。
另外,写这样的代码,有什么好玩的?ms的编译器本身问题多多,如果用vc6就有更郁闷的。
如果想避免类似的内存问题,用boundcheck吧,这样的代码在那下面都编译不过。

14

主题

283

帖子

293

积分

中级会员

Rank: 3Rank: 3

积分
293
QQ
发表于 2006-3-20 13:16:00 | 显示全部楼层

Re:天!我的C++编辑器(VC.net)突然可以数组越界了,拜托大

所以说C++是不安全且很灵活的啊.这问题有什么好郁闷害怕的?只要不出现访问冲突,当然是允许的~

28

主题

685

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2006-3-20 21:20:00 | 显示全部楼层

Re:天!我的C++编辑器(VC.net)突然可以数组越界了,拜托大

很正常啊,这又不是vector,本来数组就是指针加偏移啊。要检查,用vector得了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-23 23:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表