Visual c++ 0xC0000005:访问冲突读取位置0x00200074;从函数返回时发生

Visual c++ 0xC0000005:访问冲突读取位置0x00200074;从函数返回时发生,visual-c++,character-encoding,access-violation,Visual C++,Character Encoding,Access Violation,我目前正在开发一个程序,它以8位ASCII模式从文本文件中读取字符串,我制作了一个函数,将该字符串分配到wchar\t中* 这里我使用atlconv.h并使用_CONVERSION宏将字符串转换为wstring。下面是代码: void CSampleProvider::getCopy(CREDENTIAL_PROVIDER_FIELD_DESCRIPTOR *a, const string s) { USES_CONVERSION; wstring temp(A2W (s.c_s

我目前正在开发一个程序,它以8位ASCII模式从文本文件中读取字符串,我制作了一个函数,将该字符串分配到wchar\t中*

这里我使用atlconv.h并使用_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;
}
我使用调试器逐行监视。它运行良好(即->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.
有人知道如何解决这个问题吗?请告诉我。非常感谢您的回答:)

谢谢, 雷纳德斯


编辑:哦,是的,类型CREDENTIAL\u PROVIDER\u FIELD\u描述符是一个结构,它的一个成员是pszLabel,它是一个wchar\u t*

如果没有更完整的信息,这些东西很难调试,但是如果您在从函数返回时看到错误,我猜缓冲区溢出会覆盖返回地址,导致代码跳转到某个任意的非rx内存位置。

a->pszLabel=new WCHAR(temp.length()+1)
返回指向新的
WCHAR
的指针,其值为字符串长度加1。你的意思是
a->pszLabel=newwchar[temp.length()+1]
返回指向新的
WCHAR
数组的指针,元素数为字符串长度加1。

字符串中是否有
t
?“读取位置”似乎取决于
s
的内容吗?是的,实际上我在那里构建新的WCHAR时犯了错误。请看答案,它解决了我的问题:)哦,伙计!当然,愚蠢的我。。。非常感谢,这就解决了:)