如果我在 c++ 中以 new 的放置形式使用没有足够的内存,会发生什么情况?

What happens if i use not enough memory in placement form of new in c++?

本文关键字:内存 什么情况 中以 c++ new 如果      更新时间:2023-10-16

我研究了新的安置形式,但我没有得到明确的想法。他们说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.

这段代码是如何运行的?

我对新放置形式没有明确的想法,所以请用示例代码解释该概念和语法。请任何人。

谢谢。

此代码使用未分配的内存。

这并不意味着它必须崩溃,它更多的是在"意外结果"领域。

如果长时间运行,此代码可能会崩溃,只要您的内存损坏将覆盖重要内容/访问进程分配的页面限制之外的内存。

相关文章: