我想获取1个整数内存,但该程序如何工作?
代码:
#include<iostream>
using namespace std;
int main(){
int* k=new int[1];
for(int i=0;i<5;i++)
cin>>k[i];
for(int i=0;i<5;i++)
cout<<k[i]<<"\n";
delete[] k;
return 0;
}
输入:
999999
999998
999997
999996
999995
输出:
999999
999998
999997
999996
999995
答案 0 :(得分:4)
您通过访问未分配的内存来调用未定义的行为。这纯粹是“偶然”。从字面上看,你计划的每一个行为都是合法的,包括订购比萨饼的程序,......
这可能在大部分时间都在实践中使用,因为你的操作系统通常不只是给你4字节或类似的东西,而是整页内存(通常是4kB)但要强调这一点:你永远不会依靠这种行为!
答案 1 :(得分:1)
c ++程序使用数组的方式是它所需的索引,将它乘以构成数组的元素的大小,然后将其添加到数组中的第一个内存位置。碰巧的是,你把它放在你的程序中,返回另外4个元素并没有破坏任何东西,所以你很好。它实际上并不关心。但是,如果您覆盖另一个变量或堆栈指针,则会遇到麻烦。但是,我不建议在实践中这样做,因为行为可能是未定义的。