C++ 寻找新的内存地址?C++;

C++ 寻找新的内存地址?C++;,c++,pointers,memory,C++,Pointers,Memory,(我测试了地址,因为我遇到了错误,我发现地址在被删除之前发生了更改,当删除被称为titlePTR时,它已经更改了它的地址,并且它给了我一个错误,说“块类型有效”我听说这是当你试图删除一个不是由new创建的指针时发生的(这让我想到了地址) 顺便说一句,我知道我不必制作动态数组,但我正在读一本书,书中说要在程序不需要运行代码的时候练习节省内存。我在其他一些地方发了帖子,人们总是抱怨“不要使用新的废话” 下面是当它试图删除titlePTR或bodyPTR时所说的话: if(测试==“MapleSto

(我测试了地址,因为我遇到了错误,我发现地址在被删除之前发生了更改,当删除被称为
titlePTR
时,它已经更改了它的地址,并且它给了我一个错误,说“
块类型有效
”我听说这是当你试图删除一个不是由new创建的指针时发生的(这让我想到了地址)

顺便说一句,我知道我不必制作动态数组,但我正在读一本书,书中说要在程序不需要运行代码的时候练习节省内存。我在其他一些地方发了帖子,人们总是抱怨“不要使用新的废话”

下面是当它试图删除
titlePTR
bodyPTR
时所说的话:

if(测试==“MapleStory”)
{
wchar_t*titlePTR=新的wchar_t[30];
这将分配内存并将内存地址存储在变量(1)中。然后用新地址(2)覆盖它。然后删除新地址(3),而不是分配的内存。
因此,您的问题是,步骤(2)中的分配没有使用您准备的缓冲区,而是创建了一个新的缓冲区

要解决此问题,只需执行以下操作:

const wchar_t *titlePTR = L"MapleStory";

当然不要删除,因为您没有使用<代码> > < < />代码>分配任何内存。

在赋值期间,您正在更改指针。“但是我正在读一本书,它的意思是在你的程序不需要运行代码的时候练习节省内存。”这本书的标题是“STOND C++程序设计”。"?
顺便说一句,我知道我不必制作动态数组。
std::vector
这创建了一个动态数组,没有任何问题。即使如此,
std::basic_string
做得更好。所有这些构造都不需要指针或手动内存管理。@PaulMcKenzie我会说
std::wstring
更适合这里(好的,我在看到你的编辑之前写了评论)。
vector
不等同于动态数组,它有自己的问题。
std::unique_ptr
更接近,但我仍然怀念标准动态数组对应的
std::array
人们总是抱怨“不要用新的废话”
这不仅仅是“nag”。如果出于某种原因,您正在调用的API函数抛出异常(操作系统异常,但仍然是异常),那么您就没有机会访问调用
delete[]的行
。换句话说,你有内存泄漏。谢谢你!我知道这是那一行,但我不知道是否有一种方法可以简单地将它写在分配的地址内。我猜char/wchar\u t[]的工作方式与int不同。(因为char/wchar\u数组内部已经使用了指针/地址。但再次感谢你,人们总是说我错了,但没有完全告诉我原因和原因。没问题。你可以将此答案标记为帮助你解决此问题的答案。
wchar_t *titlePTR = new wchar_t[30];   // (1)
titlePTR = L"MapleStory";              // (2)
delete[] titlePTR;                     // (3)
const wchar_t *titlePTR = L"MapleStory";