1

我正在尝试制作一个支持 Unicode 的 C++ hello world,但我有点卡住了。

我创建了一个指向 TCHAR [我认为它是一个 char 数组] 的指针,在使用它之后,我尝试删除它。它崩溃说Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

上网查了一下,有人说是因为删错了。我尝试了两次删除,但它仍然给出了相同的消息。

我错过了什么明显的东西吗?

我试过的代码:

TCHAR *str=TEXT("おはよう, World!");
delete[] str;

也试过:

TCHAR *str=TEXT("おはよう, World!");
delete str;
4

2 回答 2

6
TCHAR *str=TEXT("おはよう, World!");

你没有分配任何东西,所以没有必要删除内存。干脆不叫delete[]TEXT是一个宏,而不是返回一些你应该自己管理的内存的函数。

这就像在之后调用 delete

char* x = "bla";
delete[] x;

只是非法的,因为你不拥有内存。

于 2012-04-11T07:30:30.103 回答
4

你只需要打电话,delete如果你打电话new,因为你没有。你不需要在delete这里打电话。
您在此处的字符串是在实现定义的内存区域而不是动态内存(又名堆)上创建的

于 2012-04-11T07:31:23.860 回答