怎么能得到比我想要的更多的内存?(C ++)

时间:2014-10-14 18:56:16

标签: c++ memory allocation

我想获取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

2 个答案:

答案 0 :(得分:4)

您通过访问未分配的内存来调用未定义的行为。这纯粹是“偶然”。从字面上看,你计划的每一个行为都是合法的,包括订购比萨饼的程序,......

这可能在大部分时间都在实践中使用,因为你的操作系统通常不只是给你4字节或类似的东西,而是整页内存(通常是4kB)但要强调这一点:你永远不会依靠这种行为!

答案 1 :(得分:1)

c ++程序使用数组的方式是它所需的索引,将它乘以构成数组的元素的大小,然后将其添加到数组中的第一个内存位置。碰巧的是,你把它放在你的程序中,返回另外4个元素并没有破坏任何东西,所以你很好。它实际上并不关心。但是,如果您覆盖另一个变量或堆栈指针,则会遇到麻烦。但是,我不建议在实践中这样做,因为行为可能是未定义的。