gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:35:18 28 4
gpt4 key购买 nike

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com