关于C++动态数组的有关问题
关于C++动态数组的问题
本人C++菜鸟一枚哈。
问题是这样的,为什么我动态申请了数组大小为100的数组,但是调用数组下标为101的数组元素时不会提示数组越界,而且输出的结果也正常?具体代码如下:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int size;
size=100;
int *a=new int[size];
//delete [] a;
a[101]=10;
cout<<a[101]<<endl;
return 0;
}
------解决思路----------------------
C/C++默认没有边界检查,因为这会带来额外开销。
如果需要的话,用vector/array的at成员函数。
------解决思路----------------------
C,C++ 不对数组越界进行检查
我猜原因是,C,C++经常用指针操作数组,而指针中不包含数组边界信息。
------解决思路----------------------
c/c++不带越界访问检测,java是有的……
------解决思路----------------------
越界检查不是编译器来保证,是需要程序员自己确保,没出错只是运气好,你写了你不该写的内存,虽然此时此刻没问题,但你程序将为以后某时某永刻的崩溃带来了隐患
本人C++菜鸟一枚哈。
问题是这样的,为什么我动态申请了数组大小为100的数组,但是调用数组下标为101的数组元素时不会提示数组越界,而且输出的结果也正常?具体代码如下:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int main()
{
int size;
size=100;
int *a=new int[size];
//delete [] a;
a[101]=10;
cout<<a[101]<<endl;
return 0;
}
------解决思路----------------------
C/C++默认没有边界检查,因为这会带来额外开销。
如果需要的话,用vector/array的at成员函数。
------解决思路----------------------
C,C++ 不对数组越界进行检查
我猜原因是,C,C++经常用指针操作数组,而指针中不包含数组边界信息。
------解决思路----------------------
c/c++不带越界访问检测,java是有的……
------解决思路----------------------
越界检查不是编译器来保证,是需要程序员自己确保,没出错只是运气好,你写了你不该写的内存,虽然此时此刻没问题,但你程序将为以后某时某永刻的崩溃带来了隐患