我目前正在开发一个程序,从8位ASCII模式的文本文件中读取字符串,并且我做了一个函数来将该字符串分配到一个wchar_t *0xC0000005:访问冲突读取位置0x00200074;当从函数返回时发生
我在这里使用atlconv.h和USES_CONVERSION宏将字符串转换为wstring。所以这里是代码:
void CSampleProvider::getCopy(CREDENTIAL_PROVIDER_FIELD_DESCRIPTOR *a, const string s) {
USES_CONVERSION;
wstring temp(A2W (s.c_str()));
a->pszLabel = new WCHAR(temp.length()+1);
if (!a->pszLabel)
return;
wcscpy_s(a->pszLabel, temp.size()+1, (LPWSTR)temp.c_str());
::MessageBox(NULL,s.c_str(),"getCopy",0);
return;
}
我用一个调试器逐行观看。它运作良好(即a-> pszLabel的内容如我所料,与s的内容相同),直到达到回报。当它返回时,弹出一个错误:
First-chance exception at 0x770f3067 in CPTest.exe: 0xC0000005: Access violation reading location 0x00200074.
Unhandled exception at 0x770f3067 in CPTest.exe: 0xC0000005: Access violation reading location 0x00200074.
有谁知道如何解决这个问题?请告诉我。您的回答是高度赞赏:)
感谢, Reinardus
编辑:噢,类型CREDENTIAL_PROVIDER_FIELD_DESCRIPTOR是一个结构,它的成员之一,是pszLabel,这是一个wchar_t的*
你的字符串中有没有't'? “阅读地点”是否取决于“s”的内容? – Gabe
是的,其实我错误地在那里建造了新的WCHAR。请看到答案,它解决了我的问题:) – user654894