【发布时间】:2014-11-05 06:32:56
【问题描述】:
我正在使用名为 Polyspace 的代码分析工具。我在一个代码部分收到“可能溢出”通知,只是可以弄清楚:)
错误:标量溢出时的操作 [从 unsigned int32 转换为 unsigned int16](结果始终严格大于 MAX UINT16) 从 unsigned int 32 到 unsigned 正确的转换: [956448 .. 972799]
代码是:
typedef unsigned char T_UBYTE;
typedef unsigned short int T_UWORD;
typedef unsigned long int T_ULONG;
typedef void __far * T_EEP_ADDRESS;
..
T_EEP_ADDRESS beeeblock_GetBlockPointer(T_UWORD luw_BATAddress)
{
T_UWORD luw_BlockPointer;
T_EEP_ADDRESS lpul_BATEntry;
..
luw_BlockPointer = ( READ_EEP_32(lpul_BATEntry) & 0xFFFFuL );
..
return (T_EEP_ADDRESS)((0x00E9800UL)+ (T_ULONG)luw_BlockPointer );
}
导致错误的行是这样的:
return (T_EEP_ADDRESS)((0x00E9800UL)+ (T_ULONG)luw_BlockPointer );
非常欢迎任何帮助:)
【问题讨论】:
标签: c pointers casting void arithmetic-overflow