Ошибка повреждения кучи в Visual C ++ при использовании операторов удаления [] и новых (размещения)

0

Фрагмент кода:

#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
Теги:
visual-c++
windows-7

3 ответа

0
Лучший ответ

Вы не выделили эту память, поэтому не пытайтесь ее освободить (с delete []).

В общем, вы будете запускать деструкторы:

for( i = 0; i < 5; i++ ) {
    T* p = pd + i;
    p->~T();
}

Но для double это не нужно.

0
pd = new (buffer) double[5];

То, что вы там делаете, заключается в повторном использовании памяти, занятой buffer для создания массива double. Итак, теперь вы удаляете память, которую вы не выделяете new.

  • 0
    @PeteBecker исправлено
0

Не делай этого. Программа не выделяла память operator new или operator new[], поэтому его не следует удалять.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню