C++ WinApi-ToUnicode函数引发访问冲突?

C++ WinApi-ToUnicode函数引发访问冲突?,c++,winapi,C++,Winapi,此代码引发以下异常: 访问冲突写入位置0xCCCC。 vk_code值在断点处似乎完全正常,我与msdn进行了检查,以确保我的参数有效。我可能做错了什么?您正在传递一个指向pwszBuff参数的未初始化指针。它需要一个指向已分配字符数组的指针。将数组更改为使用WCHAR元素而不是LPWSTR元素,并去掉*取消引用操作符: LPWSTR data[256]; ToUnicode(vk_code, 0, 0, *data, 256, 0); 在尝试摸索Windows API之前,正确地学习数组和指

此代码引发以下异常:

访问冲突写入位置0xCCCC。


vk_code
值在断点处似乎完全正常,我与msdn进行了检查,以确保我的参数有效。我可能做错了什么?

您正在传递一个指向
pwszBuff
参数的未初始化指针。它需要一个指向已分配字符数组的指针。将数组更改为使用
WCHAR
元素而不是
LPWSTR
元素,并去掉
*
取消引用操作符:

LPWSTR data[256];
ToUnicode(vk_code, 0, 0, *data, 256, 0);

在尝试摸索Windows API之前,正确地学习数组和指针是值得的。您正在给它一个未初始化的指针。@chris会这样做,当查看
0xCCCC
地址时,它原来是一个用于调试未初始化值的内存位置。这是不正确的。“地址”0xCCCC毫无意义
0xCC
是用于在调试配置中初始化未初始化变量的模式。它可以帮助您在调试期间轻松发现未初始化的变量。然而,这个实际值并不有趣。当传递
nullptr
而不是
*数据时,会出现同样的异常。
WCHAR data[256];
int res = ToUnicode(vk_code, 0, 0, data, 256, 0);
switch (res) {
    case -1:
        // dead-key character, nothing written to data[]... 
        break;
    case 0:
        // no translation, nothing written to data[]... 
        break;
    default:
        // res # of characters written to data[]... 
        break;
}