铸造损失精度[-fpermissive]
问题描述:
即时试图将地址添加到模块基地址铸造损失精度[-fpermissive]
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pId);
MODULEENTRY32 module;
module.dwSize = sizeof(MODULEENTRY32);
Module32First(snapshot, &module);
CloseHandle(snapshot);
DWORD addr = 0x1D4192 + (DWORD)module.modBaseAddr;
我不知道什么是错的
答
正如在评论中提到的,指针的大小取决于平台(64位或32位),而整数(int,long,long int ...)通常是32位同时。将指针转换为整数可能会在64位编译时产生一些精度,这就是警告的原因。
C++/commenttooshort –
在64位系统指针通常是64位宽。 'int'(因此也是'unsigned int')通常只有32位宽。现在想想当您尝试将64位值转换为32位值时会发生什么。 –
除非您的平台支持未对齐的加载/存储操作,否则'0x1D4192'看起来不像是通过32位(或更大)指针访问的有效偏移量。 –