找到新的内存地址? C ++

时间:2014-12-28 02:18:59

标签: c++ pointers memory

(我测试了地址,因为我收到错误,我发现地址在被删除之前已经更改,当调用删除时titlePTR已经更改了地址并且它给了我一个错误说“BLOCK TYPE IS VALID”我听说这是当你试图删除一个非新的指针时(这让我想到了地址)

顺便说一下,我知道我不需要创建一个动态数组,但是我正在读一本书,它说要在程序不需要运行代码的时候练习保存内存。我在其他一些地方张贴,人们总是唠叨“不要用新的等等等等”。

以下是试图删除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;
}

1 个答案:

答案 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分配任何内存。