c++ - 寻找新的内存地址? C++

标签 c++ pointers memory

(我测试了地址,因为我遇到了错误,我发现地址在被删除之前发生了变化,当删除被调用时,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 分配任何内存。

关于c++ - 寻找新的内存地址? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27673214/

相关文章:

c++ - 在 C++ 中读取文件

c++ - 我可以使用 '->' 运算符通过指针访问对象指针吗?

arrays - LUA:间隙较大的数组的内存使用情况?

c - malloc_y 函数中的可执行文件失败

c++ - 如何检查引用是否为 const?

c++ - 获取有关 X11 中鼠标光标最近显示器的信息

c++ - Linux C++ 中的 WIN32_FIND_DATA 等价物

python - Python 中返回指针而不是值的函数

c - C中指向不同数据类型的指针

c# - boolean 与内存