C++动态数组分配时传递大小参数出现异常数值问题
为什么
IN UINT8 size参数会得到奇怪数值? 这问题的核心原因其实很直白——你传入的7000远远超出了UINT8类型能承载的数值范围!
让我给你拆解清楚:
UINT8是无符号8位整数类型,它的取值范围只能是0到255(因为8位二进制最多能表示2^8=256个不同的值)。- 当你把
7000这个远超范围的数值传给UINT8类型的参数时,会触发整数溢出截断:计算机只会保留这个数的最后8位二进制位,高位的内容会直接被丢弃。
我们可以简单算一下最终截断后的数值:7000 ÷ 256 = 27,余数是7000 - 256×27 = 7000 - 6912 = 88。所以size参数实际拿到的数值是88,这就是你觉得“奇怪”的来源。
怎么解决这个问题?给你两个方案:
- 最直接的:把参数类型从
UINT8改成更大范围的无符号整数类型,比如UINT16(范围0-65535)或者UINT32,这样就能轻松容纳7000这种较大的数值了。 - 如果必须保留
UINT8类型,那传入的数值绝对不能超过255,否则必然会出现截断后的异常值。
举个修改后的函数定义示例:
JumboPacket(IN OUT UINT8* &p_buffer, IN UINT16 size, IN MACAddress src, IN MACAddress dst) { UINT8 *my_buff_to_send = new UINT8[size] { 0 }; }
这样再传入7000就不会有异常啦。
内容的提问来源于stack exchange,提问作者DvoraFux
相关产品推荐
相关产品推荐

