大家我看一下何用new-delete出呢?
void main()
{
LPCWSTR str = _T( "UnicodeString ");
char *p = new char[13];
memset(p, 0, 13);
WideToChar(str, p);
delete [] p; <----在出
}
int WideToChar(LPCWSTRpWide,LPSTRpChar)
{
int len = ::WideCharToMultiByte( CP_ACP, 0, pWide, -1,pChar, 0, NULL, NULL);
int iConvert = ::WideCharToMultiByte( CP_ACP, 0, pWide, -1,pChar,len, NULL, NULL);
returniConvert;
}
WideToChar是我自己的函, 用Unicode化AnsiString的, 什句函後再除存就出呢?在不理解, 大家指教.
[解决办法]
基本你可以这样理解:
你new了13个字节的内存.编译器在堆上就分配13个字节的内存给你,同时还会在后(或者是前),写一个字节(或者几个字节,也忘了)的标志位,来记录你申请的长度.
而你实际写了14字节,就可能覆盖掉了标志位,然后系统回收堆内存的时候按你改写的标志位来回收内存,谁也不知道会把那些有用的内存给回收了,于是就崩溃了.
大概是这个样子吧,记得写的时候不要超过你申请的长度就行了.