关于C++动态数组的问题

暮村广树 2015-11-12 09:28:53
本人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;
}
...全文
123 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
D41D8CD98F 2015-11-13
  • 打赏
  • 举报
回复
有工具可以检测内存错误。不过如果不用,当然不能指望程序立即提示数组越界
赵4老师 2015-11-13
  • 打赏
  • 举报
回复
其实电脑开机后物理内存的每个字节都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
paschen 版主 2015-11-13
  • 打赏
  • 举报
回复
越界检查不是编译器来保证,是需要程序员自己确保,没出错只是运气好,你写了你不该写的内存,虽然此时此刻没问题,但你程序将为以后某时某永刻的崩溃带来了隐患
C209 2015-11-13
  • 打赏
  • 举报
回复
c/c++不带越界访问检测,java是有的……
lm_whales 2015-11-13
  • 打赏
  • 举报
回复
C,C++ 不对数组越界进行检查 我猜原因是,C,C++经常用指针操作数组,而指针中不包含数组边界信息。
ID870177103 2015-11-12
  • 打赏
  • 举报
回复
因为[]对于普通类型只是语法糖不是运算 你写cout << 101[a] ;也是可以的
iyomumx 2015-11-12
  • 打赏
  • 举报
回复
C/C++默认没有边界检查,因为这会带来额外开销。 如果需要的话,用vector/array的at成员函数。

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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