2012-04-11 174 views
1

我想做一个支持Unicode的C++ hello世界,但我有点卡住了。删除TCHAR指针

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

检查interwebs,有人说这是因为使用了错误的删除。我尝试了两次删除,但它仍然提供相同的消息。

我错过了一些明显的东西吗?

代码我想:

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

也试过:

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

回答

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

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

这就像调用删除后

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

就违法,因为你没有自己的记忆。

+0

Ohh snap。谢谢一堆。我有很多要学习的。 :P – RandomClown 2012-04-15 04:11:42

4

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

+0

很高兴知道。我认为我必须在指向某些数据的指针超出范围之前删除它。 – RandomClown 2012-04-15 04:12:57