如果我在 c++ 中以 new 的放置形式使用没有足够的内存,会发生什么情况?
What happens if i use not enough memory in placement form of new in c++?
我研究了新的安置形式,但我没有得到明确的想法。他们说new的放置形式允许您从已分配的内存中创建对象。但请参阅以下代码。
#include <iostream>
using namespace std;
class ex
{
public:
int x;
int y;
double z;
ex()
{
cout<<"constructor";
}
~ex()
{
cout<<"destructor";
}
};
int main()
{
char *pt=new char;
ex *p;
p=new(pt) ex();
p->x=4444;
p->y=3333;
p->z=65.87879898;
cout<<"n"<<p->x<<"n"<<p->y<<"n"<<p->z<<"n";
p->~ex();
free(pt);
return 0;
}
我预计上面的代码无法运行,但它成功运行会产生以下输出:
constructor
4444
3333
65.8788
destructor
Process returned 0 (0x0) execution time : 0.106 s
Press any key to continue.
这段代码是如何运行的?
我对新放置形式没有明确的想法,所以请用示例代码解释该概念和语法。请任何人。
谢谢。
此代码使用未分配的内存。
这并不意味着它必须崩溃,它更多的是在"意外结果"领域。
如果长时间运行,此代码可能会崩溃,只要您的内存损坏将覆盖重要内容/访问进程分配的页面限制之外的内存。
相关文章:
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 将指针分配给另一个指针时会发生什么情况?
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 估计 Ubuntu C++内存使用情况
- 如何删除列出的"QGraphicsPathItem"对象以控制进程内存使用情况?
- 在什么情况下,我想在 C/C++ 代码中使用内联汇编代码
- 重新分配向量时,向量中的内存会发生什么情况
- 如果我在 c++ 中以 new 的放置形式使用没有足够的内存,会发生什么情况?
- 初始化原子指针是原子的吗?如果初始化或内存分配引发,会发生什么情况?
- 如果在进程崩溃后在进程中分配内存,会发生什么情况
- 我可以使用什么工具来分析内存使用情况
- 如果 new-handler 函数未正确编写或无法在 c++ 中释放更多内存,会发生什么情况
- 直接索引访问与"high"内存使用量相比的理论影响是什么? "shifted"使用"low"内存使用情况的索引访问?
- 在参数中传递给 exec*() 函数系列的内存会发生什么情况
- 一个函数调用另一个函数时使用的内存会发生什么情况
- 如果我在 C++ 中调用 new,但堆内存不足,会发生什么情况
- 堆上未释放的内存会发生什么情况
- 将值分配给未分配的内存时会发生什么情况
- 如果算术运算的结果未存储在内存中会发生什么情况
- 如果其中一个进程意外死亡,进程间内存会发生什么情况