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

How could it get more memory than I wanted?(C++)

本文关键字:内存 C++ 我想要 怎么能      更新时间:2023-10-16

我想使用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

您通过访问未分配的内存来调用未定义的行为。这完全是"偶然"发生的。从字面上看,你程序的每一种行为都是合法的,包括点披萨的程序。。。

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

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