它怎么能获得比我想要的更多的内存?(C++)
How could it get more memory than I wanted?(C++)
我想使用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个元素并没有破坏任何东西,所以你很好。它其实并不在乎。但是,如果覆盖另一个变量或堆栈指针,则会遇到麻烦。然而,我不建议在实践中这样做,因为行为可能是未定义的。
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 如何在C++类内存结构中创建"spacer"?
- 从构造函数抛出异常时如何克服内存泄漏
- malloc() 可能出现内存泄漏
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 类型总是使用其大小存储在内存中吗
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存