我目前正在開發一個程序,從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