应用程序在释放内存时冻结

时间:2012-09-22 16:09:19

标签: c windows memory malloc free

我有以下代码,我尝试将字符串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.

1 个答案:

答案 0 :(得分:1)

L“%X”请求指向int的指针,而不是BYTE

所以,它一定是

int x;
swscanf_s(HexChar, L"%X", &x);
bData[n++] = x;