使用new申请了100亿大小的内存空间,但是只有14亿多的能访问。
int main()
{
const size_t n = 10000000000;
int* a = new int[n];
a[0] = 10;
a[6000000000] = 10;
return 0;
}
编译会有警告 索引“6000000000”超出了“0”至“1410065407”的有效范围(对于非堆栈缓冲区“a”)。
运行报错 引发了异常: 写入访问权限冲突。
程序能分到的内存是有限的
你开的太大了超出了内存限制,所以直接报错了应该是
100亿大小的内存空间,嗯。。。。就是10G的内存,你内存有这么大么?
c语言是32位的程序,它只支持int类型的寻址范围,也就是最大1410065407
超过了会无法寻址
编译器在语言的语法上面有限制,操作系统在内存申请上也有限制,双重保险。
为什么会是这么个奇怪数字,那就不知道了
运行截图