C++中如何知道定义的数组越界

比如开了10个int的数组,然后在大型project中小伙伴们一起改,然后定义到了20个,于是越界了。debug是发现不了的,那我们应该如何知道我们定义的数组越界?
另一个小问题:我们预计要使用10个int的数组,应该开多少个会比较好?

可以这样判断数组的元素数目:

int arr[10];
int cnt = sizeof(arr)/sizeof(int);  // cnt即为arr的元素数目

如果对效率要求没那么苛刻,可以使用c++的标准库里的array类或vector类,在debug模式下访问越界时会报错

追问

谢谢!那小问题的话,为什么把数组开到15(就是int[15])会比较好?好像效率会高一些?

追答

int arr[15]; 在内存中是15个整数连续排列,对其中元素的存取操作编译后生成的汇编指令很少;

array和vector是c++类,其元素的存取都是成员函数实现,编译后的机器指令多了许多,还涉及到函数的调用、函数栈的维护开销等,效率要低了不少。不过现在的电脑、手机、工控机等CPU都很快,如果是做普通应用程序,这种效率差异并不明显,用户基本感觉不到。

追问

谢谢!最后追问一下,15个整数连续排列为什么汇编指令会很少呢...?这是什么原因?

追答

连续内存空间的寻址一个汇编指令就可以完成,你可以看看x86的寻址方式,一般的微机原理教科书里都有讲到。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-07-04
别用int [10]。std::array自带可以检查越界的成员函数
第2个回答  2015-07-04
int [10]烫烫烫烫烫越界
第3个回答  2015-07-04
使用vector,使用模板,使用静态检查,使用共享头文件,各种方法都可以
第4个回答  2015-07-04
写好单元测试跑过再提交代码
相似回答