关于C++语言中数组越界的问题

各位大侠:C++语言中数组越界属于异常吗,用普通的异常处理能否捕捉?如果普通的异常处理没有效果,应该采用什么手段处理越界问题?小弟被这些问题困扰许久!... 各位大侠:
C++语言中数组越界属于异常吗,用普通的异常处理能否捕捉?
如果普通的异常处理没有效果,应该采用什么手段处理越界问题?
小弟被这些问题困扰许久!
展开
 我来答
拥云庄主
推荐于2017-09-07 · TA获得超过2503个赞
知道小有建树答主
回答量:672
采纳率:100%
帮助的人:419万
展开全部

这种应该不算是异常,是程序的bug,用C++的异常处理也比较难捕捉,越界读写都可能导致错误的结果,甚至导致程序崩溃,要处理这种情况只能靠平时写代码时多积累,在有可能发生越界的地方做相应的判断处理。另外,可以用一些静态代码检查工具来帮助发现问题,但是并不能保证所有问题都能发现,关键还是要靠程序员的经验,所以说一般公司招程序员都需要有经验的。比较好的工具有pc-lint,比如我下面这个例子:

我上面的代码发生了写越界,但是运行时,并不能捕获异常。使用pc-lint检查工具来检查,可以发现这两个地方的越界写都可以检查出来。双击下面的提示就能转换到有问题的代码。

linccn
2014-12-04 · 超过67用户采纳过TA的回答
知道小有建树答主
回答量:131
采纳率:0%
帮助的人:101万
展开全部
[]操作符不会抛出异常,所以完全没办法捕捉
可以用vector的at()方法,这个函数能抛出out_of_range异常。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yaoyue1019
2014-12-04 · 知道合伙人互联网行家
yaoyue1019
知道合伙人互联网行家
采纳数:804 获赞数:3392
擅长lua脚本 与android前端交互设计

向TA提问 私信TA
展开全部
不算是异常
算是代码的bug
一般来说 靠好的书写习惯主观上进行避免
比如在使用下标前进行一些异常的判断
if(index < len)
... // 执行函数体
else
... // 进行一些log或者异常抛出
当然 如果每次都这样判断相对是比较冗余的
一般只有在这个index是计算或是外部传进来时 才需要判断
这个只要代码写多了 自己控制好 一般就不会有问题了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
金鱼8884
2015-10-29 · 知道合伙人数码行家
金鱼8884
知道合伙人数码行家
采纳数:124 获赞数:14949
学生

向TA提问 私信TA
展开全部
  二维数组定义的一般形式为:类型说明符 数组名 [常量表达式][常量表达式]
这两个常量表达式分别指定了二维数组的行数和列数,程序编译时据此向内存申请空间。
而引用二维数组的格式为: 数组名[行下标][列下标],行下标和列下标都是从0开始排序。这里的下标和上面的常量表达式意义不同,范围也不同。
  例如:
  int b[4][5]是定义一个名为b的二维数组,它包含4行5列,共20个元素。如果存放数组b的首地址为p,则内存为数组分配的空间是p~p+19;数组b的行下标范围为0~3,列下标范围为0~4,地址p+19存放的元素为b[3][4]。如果要引用b[4][5],由于没有提前向内存申请地址,则会随机指向一个地址,得到一个垃圾数据,无法实现我们的目的,就说是引用下标越界。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式