正在查找新的内存地址?C++

Finding new memory address? C++

本文关键字:地址 C++ 内存 查找      更新时间:2023-10-16

(我测试了地址,因为我收到错误,我发现地址在被删除之前发生了变化,当删除被称为时,titlePTR已经更改了它的地址,它给了我一个错误说"BLOCK TYPE IS VALID"我听说这是当你尝试删除一个不是由new制作的指针时(所以这让我想到了地址)

顺便说一句,我知道我不必制作动态数组,但我正在读一本书,它说要练习在程序不需要运行代码的时候节省内存。我在其他几个地方发帖,人们总是唠叨"不要使用新的等等等等"

以下是尝试删除titlePTRbodyPTR时所说的: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;
}
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 分配任何内存。