Я изучил 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 круга.
Если вы попросите памяти с new
необходимо удалить с помощью delete
,
Использовать только delete [ ]
когда ты использовал new [ ]
, Несовпадение двух приводит к неопределенному поведению.
Других решений пока нет …