代码段:
#include <new>
char buffer[512];
int main()
{
double *pd;
pd = new (buffer) double[5];
delete [] pd;
return 0;
}
仅在使用新运算符的展示位置新形式时才会挂起。
我正在使用以下工具和选项:
> cl -EHsc foobar.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 18.00.21005
Microsoft (R) Incremental Linker Version 12.00.21005.1
答案 0 :(得分:0)
pd = new (buffer) double[5];
你正在做的是重用buffer
占用的内存来创建一个double数组。所以现在你要删除一个你没有用new
分配的内存。
答案 1 :(得分:0)
不要那样做。该程序没有使用operator new
或operator new[]
分配内存,因此不应删除它。
答案 2 :(得分:0)
您没有分配该内存,因此您不应该尝试释放它(使用delete []
)。
通常,您将运行析构函数:
for( i = 0; i < 5; i++ ) {
T* p = pd + i;
p->~T();
}
但double
不是必需的。