【发布时间】:2012-04-13 21:02:09
【问题描述】:
简单的问题,我在使用 memmove() 和 memcpy() 时遇到问题。我真的不明白我的代码有什么问题。顺便说一句,我使用 QT。
HANDLE hFile;
HANDLE hMapFile;
HANDLE hMapView;
hFile = CreateFileW((const wchar_t*) objPath.constData(), GENERIC_READ , 0, NULL, OPEN_EXISTING, 0, NULL);
if (hFile != INVALID_HANDLE_VALUE){
hMapFile = CreateFileMappingW(hFile, NULL, PAGE_READONLY, 0, 0, NULL);
if (hMapFile != INVALID_HANDLE_VALUE){
hMapView = MapViewOfFile(hMapFile, GENERIC_READ, 0, 0,0);
if (hMapView != INVALID_HANDLE_VALUE){
uint DefineWord;
memmove((void *) &DefineWord, hMapView,2); // <- always error right here
qDebug()<<DefineWord;
}
}
}
【问题讨论】:
-
如果您更明确地说明您的要求,将会很有帮助。你有一条评论,埋在你的源代码中,说“总是在这里出错”。请准确告诉我们错误是什么(是否有错误消息?),并在您的问题中提供该信息,而不仅仅是在您的源代码中。谢谢。
-
特别是,您在编译代码或运行代码时是否遇到错误?
-
当我调试时,有一条消息“segmentation fault”SIGSEGV。
-
你有
#include <string.h>吗?没有它,编译器就看不到memmove的声明,也不一定能诊断出用错误类型的参数调用它(正如 Zan Lynx 所说,hMapView不是指针)。但是应该有一个编译时警告;有吗? -
当然我有#include
,我也将声明更改为LPVOID hMapView。总是出现相同的错误消息。