gpt4 book ai didi

c++ - 为什么在将 LPBYTE 复制到 LPTSTR(剪贴板)期间使用 memcpy 时抛出异常?

转载 作者:行者123 更新时间:2023-11-27 23:33:33 25 4
gpt4 key购买 nike

我有一个 LPBYTE 数组(从文件中获取),我需要将它复制到 LPTSRT(实际上是复制到剪贴板)。问题是复制工作但不稳定,有时会抛出异常(不总是),我不明白为什么。代码是:

     FILE *fConnect = _wfopen(connectFilePath, _T("rb"));
if (!fConnect)
return;
fseek(fConnect, 0, SEEK_END);
lSize = ftell(fConnect);
rewind(fConnect);

LPBYTE lpByte = (LPBYTE) malloc(lSize);
fread(lpByte, 1, lSize, fConnect);
lpByte[lSize] = 0;
fclose(fConnect);

//Copy into clipboard
BOOL openRes = OpenClipboard(NULL);
if (!openRes)
return;
DWORD err = GetLastError();

EmptyClipboard();
HGLOBAL hText;
hText = GlobalAlloc(GMEM_MOVEABLE, (lSize+ sizeof(TCHAR)));

LPTSTR sMem = (TCHAR*)GlobalLock(hText);
memcpy(sMem, lpByte, (lSize + sizeof(TCHAR)));

最后一个字符串是抛出异常的地方。非常感谢

最佳答案

我不是说,这是您问题的原因,但它可能是或可能是将来其他问题的原因。

如果你这样分配内存

LPBYTE lpByte = (LPBYTE) malloc(lSize);  

这是分配的内存块之外的访问:

lpByte[lSize] = 0;

分配的内存大小为 lSize它包含位置形式 &lpByte[0]&lpByte[lSize - 1]包容性。

编辑:

正如汉斯注意到的那样,memcpy还访问分配 block 之外的内存。如果sizeof(TCHAR)为1,最后读取的字节为lpByte[lSize]如果sizeof(TCHAR)大于 1,超过 lpByte[lSize] 的字节数也被阅读或至少试图被阅读。

关于c++ - 为什么在将 LPBYTE 复制到 LPTSTR(剪贴板)期间使用 memcpy 时抛出异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2978566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com