【发布时间】:2012-09-22 16:09:19
【问题描述】:
我有以下代码,我尝试将字符串03080000 转换为字节数组,第一个字节为 03,第二个为 08,第三个为 00,第四个为 00。
但是当我释放内存时它一直冻结。
我尝试使用调试器(Visual Studio)单步执行它,但是当我跨过 free() 函数时,调试器似乎停止了,它只是挂起。
我写信的方式是否破坏了bData?或者有什么问题?
LPCWSTR lpValueData = L"03080000"
WCHAR HexChar[2] = {0};
UINT i;
UINT n = 0;
DWORD dwDataSize;
PBYTE bData;
dwDataSize = wcslen(lpValueData) / 2;
bData = (PBYTE) malloc(dwDataSize);
for (i = 0; i < dwDataSize * 2; i += 2)
{
HexChar[0] = lpValueData[i];
HexChar[1] = lpValueData[i + 1];
swscanf_s(HexChar, L"%X", &bData[n++]);
}
// I want bData to be {0x03, 0x08, 0x00, 0x00}
// Compare bData to another byte array here with memcmp
free(bData); // freezes here.
【问题讨论】:
-
你不能使用
strdup或wcsdup吗?而malloc应该得到(dwDataSize * sizeof(WCHAR))。而且你的代码不是标准的 C,它是 Windows 特定的,所以应该这样标记(例如,它不会在 Posix 系统或 Linux 上编译)。 -
你的
malloc应该得到字节数。我错了,您可能至少需要(dwDataSize+1) * sizeof(WCHAR)甚至更多。
标签: c windows memory malloc free