在 C/C++ 中遇到 cast from pointer to smaller type ‘unsigned int’ loses information 错误,通常是因为在 64位系统中尝试将 64位指针 强制转换为 32位无符号整型(unsigned int),导致高位数据丢失。
错误原因:
指针与整型大小不匹配
64位系统:指针占 8 字节,unsigned int 占 4 字节。
32位系统:指针和 unsigned int 均占 4 字节,转换安全。
错误场景:
在 64 位环境下直接使用 (unsigned int)ptr 进行转换。机器上因为int为4字节,指针为8字节,int无法容纳一个指针的值。
解决方案:
将(unsigned int)强制类型转换修改成:(unsigned int)(uintptr_t)
6585

被折叠的 条评论
为什么被折叠?



