Не могу удалить указатель, сработала точка останова

Я изучил C ++ в онлайн-курсе, но у меня возникла проблема с оператором «delete» в Visual Studio. Когда удаление выполняется, он открывает файл delete_scalar.cpp и показывает:

ConsoleApplication.exe вызвал точку останова. исключение

Я уже перемещаю папку SymbolCache из temp, включая wntdll.pdb и т. Д.

#include "pch.h"#include <iostream>
using namespace std;

int main()
{
int *pInt = new int;
*pInt = 3;
cout << *pInt << endl;
cout << pInt << endl;

delete[] pInt; //error -- UPDATED: still get error with `delete pInt;`

return 0;
}

здесь информация о выходе,

«ConsoleApplication11.exe» (Win32): загружен «C: \ Windows \ SysWOW64 \ ntdll.dll». Символы загружены.
«ConsoleApplication11.exe» (Win32): загружен «C: \ Windows \ SysWOW64 \ kernel32.dll». Символы загружены.
«ConsoleApplication11.exe» (Win32): загружен «C: \ Windows \ SysWOW64 \ KernelBase.dll». Символы загружены.
«ConsoleApplication11.exe» (Win32): загружен «C: \ Windows \ SysWOW64 \ msvcp140d.dll». Символы загружены.
«ConsoleApplication11.exe» (Win32): загружен «C: \ Windows \ SysWOW64 \ vcruntime140d.dll». Символы загружены.
«ConsoleApplication11.exe» (Win32): загружен «C: \ Windows \ SysWOW64 \ ucrtbased.dll». Символы загружены.
Поток 0x2fd0 вышел с кодом 0 (0x0).
HEAP [ConsoleApplication11.exe]: неверный адрес, указанный для RtlValidateHeap (00930000, 009359E8)
ConsoleApplication11.exe вызвал точку останова.

delete_scalar.cpp из самого визуала,

//
// delete_scalar.cpp
//
//      Copyright (c) Microsoft Corporation. All rights reserved.
//
// Defines the scalar operator delete.
//
#include <crtdbg.h>
#include <malloc.h>
#include <vcruntime_new.h>
#include <vcstartup_internal.h>

_CRT_SECURITYCRITICAL_ATTRIBUTE
void __CRTDECL operator delete(void* const block) noexcept
{
#ifdef _DEBUG
_free_dbg(block, _UNKNOWN_BLOCK); // the circle X symbol showed up there
#else
free(block);
#endif
}

Я уже делаю точки останова, такие как включение и удаление, но точка останова все еще срабатывает на delete_scalar.cpp с отображением символа X круга.

0

Решение

Если вы попросите памяти с newнеобходимо удалить с помощью delete,

Использовать только delete [ ] когда ты использовал new [ ], Несовпадение двух приводит к неопределенному поведению.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]