我正在从光盘读取原始字节并尝试以十六进制打印它们。我在 ConsoleApp.exe 中收到“0x666CDF46 (msvcr110d.dll) 处的未处理异常:0xC0000005:访问冲突写入位置 0x002EC000。” 在 for 循环内。我的猜测是我跑完了 TCHAR 数组的末尾,str
但我不知道为什么。dwBytesRead
并且dwSize
是 4096。for 循环在 4027 时停止异常i
,我相信它应该到达 4096。有人可以对此有所了解吗?
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hCD, hFile;
DWORD dwBytesRead;
hFile = CreateFile (L"sector.dat",...);
hCD = CreateFile (L"\\\\.\\E:", ...);
if (hCD != INVALID_HANDLE_VALUE)
{
DISK_GEOMETRY dgCDROM;
...
LPBYTE lpSector;
DWORD dwSize = 2 * dgCDROM.BytesPerSector; // 2 sectors
lpSector = (LPBYTE) VirtualAlloc (NULL, dwSize,
MEM_COMMIT|MEM_RESERVE,
PAGE_READWRITE);
....
if (ReadFile (hCD, lpSector, dwSize, &dwBytesRead, NULL)) {
const int size = (int) dwBytesRead;
TCHAR *str = new TCHAR[size*2+1];
int i;
for (i=0; i<size;i++) {
_stprintf_s(str+2*i, (size_t) dwBytesRead, L"%02x", lpSector[i]);
}
str[2*i]=L'\0';
OutputDebugString(str);
...
}
...
}
}