(我测试了地址,因为我收到错误,我发现地址在被删除之前已经更改,当调用删除时titlePTR
已经更改了地址并且它给了我一个错误说“BLOCK TYPE IS VALID
”我听说这是当你试图删除一个非新的指针时(这让我想到了地址)
顺便说一下,我知道我不需要创建一个动态数组,但是我正在读一本书,它说要在程序不需要运行代码的时候练习保存内存。我在其他一些地方张贴,人们总是唠叨“不要用新的等等等等”。
以下是试图删除titlePTR
或bodyPTR
的内容:
http://postimg.org/image/gt0f8kufn/
if (test == "MapleStory")
{
wchar_t *titlePTR = new wchar_t[30]; <-- Example Address: 051
cout << titlePTR;
wchar_t *bodyPTR = new wchar_t[20];
titlePTR = L"MapleStory";
bodyPTR = L"Launching MapleStory...";
MessageBox(NULL, bodyPTR, titlePTR, MB_OK | MB_ICONINFORMATION);
ShellExecute(NULL, L"open", L"GameLauncher.exe", NULL, L"C:\\Nexon\\MapleStory", 1);
cout << endl << titlePTR; <-- Example Address: 0601
delete[] titlePTR;
delete[] bodyPTR;
}
答案 0 :(得分:2)
wchar_t *titlePTR = new wchar_t[30]; // (1)
titlePTR = L"MapleStory"; // (2)
delete[] titlePTR; // (3)
这分配内存并将内存的地址存储在变量(1)中。然后用新地址覆盖它(2)。然后删除新地址(3),而不是分配的内存。 所以你的问题是步骤(2)中的赋值不使用你准备的缓冲区,而是创建一个新的缓冲区。
要修复,只需执行:
const wchar_t *titlePTR = L"MapleStory";
当然不要删除,因为你没有使用new
分配任何内存。