发现一个奇怪的问题,数组越界竟然不报错!!!

岁月小龙 2010-09-10 09:59:45
环境:VC2008中文版
问题描述:定义一个数组:
int nItemXQ[120];

给程序初始化赋值
for (k=0;k<120;k++)
{
nItemXQ[k]=0;
}
nItemXQ[120]=0;
nItemXQ[121]=1;
//这2处数组下标明显大于120 ,越界了
可是程序照常运行,没有一点异常,请问是怎么回事呢?
...全文
957 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
frattini 2010-09-13
  • 打赏
  • 举报
回复
应该和操作系统的内存管理有关
没钱吃饭 2010-09-10
  • 打赏
  • 举报
回复
你用 vc6.0 试试
ofx 2010-09-10
  • 打赏
  • 举报
回复
那并没有错,越界的那部分只是当常量处理了,若你在对它做其他如加减乘除的操作就会报错了,因为那块内存不是当变量处理的
悟迟 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 taoshengyijiu20008 的回复:]

引用 5 楼 lfs09 的回复:
debug模式下经常这样,我用的还是vs2008呢,都这样,release时,就狂报错,还搞了好久才发现的呢....
有时release都不报错,所以写代码时,一定要小心


我是在release模式下的啊,也没有报错的

我记得在VC6下这种情况肯定是运行就报错的
[/Quote]1楼已经说明情况了
一名程序员 2010-09-10
  • 打赏
  • 举报
回复
数组越界的检查不是强制性的,是在编译器这边限制的。如果故意恶意越界,编译器是限制不了的。
luocw110 2010-09-10
  • 打赏
  • 举报
回复
搞不懂怎么不报错
hucailai 2010-09-10
  • 打赏
  • 举报
回复
数组后面会保留一部分空间的,楼主试下nItemXQ[123]=1;nItemXQ[124]=1;。。。应该会报错的。
岁月小龙 2010-09-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lfs09 的回复:]
debug模式下经常这样,我用的还是vs2008呢,都这样,release时,就狂报错,还搞了好久才发现的呢....
有时release都不报错,所以写代码时,一定要小心
[/Quote]

我是在release模式下的啊,也没有报错的

我记得在VC6下这种情况肯定是运行就报错的
  • 打赏
  • 举报
回复
越界后果自负,编译器不管。
你妹的特盗不 2010-09-10
  • 打赏
  • 举报
回复
debug模式下经常这样,我用的还是vs2008呢,都这样,release时,就狂报错,还搞了好久才发现的呢....
有时release都不报错,所以写代码时,一定要小心
pcwe2002 2010-09-10
  • 打赏
  • 举报
回复
C++标准上面说了,出错是未定义,就是说以什么形式表现出来都是正常的。
dukelee 2010-09-10
  • 打赏
  • 举报
回复
数组越界和指针任意指并取值都是未定义的,程序可以编译连接通过
但可能引起各种段错误导致程序崩溃,你这个程序比较简单,越界了也没什么大问题
lifecode 2010-09-10
  • 打赏
  • 举报
回复
正常呀,debug的情况下,不一定报错的,内存检查不严格
dengzikun 2010-09-10
  • 打赏
  • 举报
回复
并不是一越界就异常的.异常可能会在将来发生,或者这次越界没有破坏关键数据.
副组长 2010-09-10
  • 打赏
  • 举报
回复
那是你越界写入东西的位置无关紧要。越界写到谁的地盘是不一定的,写到要害部位一个字节就死翘翘。
arong1234 2010-09-10
  • 打赏
  • 举报
回复
只有你运行时库去做越界检测才会报错。可是越界检测怎么做?除非是类中的访问越界,你才有机会去检测,在数组越界时,实际上没有任何可靠的方法去检测。既然没有办法准确检测,为什么就一定会报错?报错只有当你数据写到不可写的地方,或者被你破坏的数据导致其他错误才会出现,不会自动报错[Quote=引用 7 楼 taoshengyijiu20008 的回复:]
引用 5 楼 lfs09 的回复:
debug模式下经常这样,我用的还是vs2008呢,都这样,release时,就狂报错,还搞了好久才发现的呢....
有时release都不报错,所以写代码时,一定要小心


我是在release模式下的啊,也没有报错的

我记得在VC6下这种情况肯定是运行就报错的
[/Quote]
yaoyue1019 2010-09-10
  • 打赏
  • 举报
回复 1
越界 如果没覆盖到有用数据 是不会有问题的 不过占掉了一些还没用到 或者没用的空间罢了 所以不会错

但是如果修改到有用的内存的话 就有可能出错了 有可能是报错 也有可能是不错 但是运行出不同的结果

你试下 长度改成10000 然后全部写入 1 我就不信还不错
hilevel 2010-09-10
  • 打赏
  • 举报
回复
所以用数组一定要小心
shenyi0106 2010-09-10
  • 打赏
  • 举报
回复
你拿了别人的money,别人不来找你,一切OK,但是来找你了,你就麻烦了;
同理
LZNJ06 2010-09-10
  • 打赏
  • 举报
回复
越界不报错,报错想不到越界.....就麻烦了!
加载更多回复(2)
BoT-SORT是发表于2022年的先进的多目标跟踪算法,它结合了运动和外观信息、相机运动补偿和更准确的卡尔曼滤波状态向量,并把这些改进集成到ByteTrack,从而在MOTA、IDF1和HOTA性能指标上超过了ByteTrack,增强了目标跟踪的鲁棒性,比较适用于存在相机运动的场景。YOLOv8代码中已集成了BoT-SORT。本课程使用YOLOv8和BoT-SORT对视频中的行人、车辆做多目标跟踪计数与越界识别,开展YOLOv8目标检测和BoT-SORT多目标跟踪强强联手的应用。课程分别在Windows和Ubuntu系统上做项目演示,并对BoT-SORT原理和代码做详细解读(使用PyCharm单步调试讲解)。课程包括:基础篇、实践篇、原理篇和代码解析篇。Ÿ  基础篇包括多目标跟踪任务介绍、常用数据集和评估指标;Ÿ  实践篇包括Win10和Ubuntu系统上的YOLOv8+BoT-SORT的多目标跟踪计数与越界识别具体的实践操作步骤演示;Ÿ  原理篇中讲解了马氏距离、匈牙利算法、卡尔曼滤波器、SORT、DeepSORT和BoT-SORT多目标跟踪算法的原理,并解读了BoT-SORT论文;Ÿ  代码解析篇中使用PyCharm单步调试对BoT-SORT的代码逐个文件进行讲解。课程提供代码解析文档。相关课程:《YOLOv8+ByteTrack多目标跟踪(行人车辆计数与越界识别)》https://edu.csdn.net/course/detail/38901《YOLOv8+DeepSORT多目标跟踪(行人车辆计数与越界识别)》 https://edu.csdn.net/course/detail/38870《YOLOv5+DeepSORT多目标跟踪与计数精讲》https://edu.csdn.net/course/detail/32669 

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧