C++ visualc&x2B+;使用delete[]和new(placement)运算符时发生堆损坏错误

C++ visualc&x2B+;使用delete[]和new(placement)运算符时发生堆损坏错误,c++,visual-c++,windows-7,C++,Visual C++,Windows 7,代码段: #include <new> char buffer[512]; int main() { double *pd; pd = new (buffer) double[5]; delete [] pd; return 0; } 这里要做的是重用buffer占用的内存来创建一个double数组。因此,现在您正在删除未使用new分配的内存,请不要这样做。程序没有使用运算符new或运算符new[]分配内存,因此不应删除它。您没有分配该内存,因此不应尝试释

代码段:

#include <new>
char buffer[512];

int main()
{
   double *pd;
   pd = new (buffer) double[5];
   delete [] pd;
   return 0;
}

这里要做的是重用
buffer
占用的内存来创建一个double数组。因此,现在您正在删除未使用
new

分配的内存,请不要这样做。程序没有使用
运算符new
运算符new[]
分配内存,因此不应删除它。

您没有分配该内存,因此不应尝试释放它(使用
delete[]

通常,您会运行析构函数:

for( i = 0; i < 5; i++ ) {
    T* p = pd + i;
    p->~T();
}
(i=0;i<5;i++)的
{
T*p=pd+i;
p->~T();
}
但是对于双倍的来说,这是不必要的。

有点像是一个复制品
pd = new (buffer) double[5];
for( i = 0; i < 5; i++ ) {
    T* p = pd + i;
    p->~T();
}