c++数据越界问题

最近的工作遇到了一个很基础的c++数据越界的问题,程序运行一直报“内存不足”。开始一直以为是程序运行时产生了内存碎片导致,无法分配一大块内存区。后来终于发现是一个非常基础的数据越界问题。

问题演示:

int h,w,count,imgsize;
h=20000;
w=20000;
count=7
imgsize=h*w*count/8;
byte* img=new byte[imgsize];//操作系统提示:内存不足

分析:

int占32位是,最大整数是2^31-1=2147483647;而刚计算的w*h*count/8=20000*20000*7/8=350000000;小于于int的最大整数。但是打断点发现imgsize的值是一个随机负数。我感到很懵,于是病急乱投医,改成了下面这样的。

double imgsize=h*w*count/8;

问题还是没有解决,于是我怀疑计算机的计算能力坏掉了哈哈,把这个式子拆分开来计算,结果竟然对了。

double imgsize=w;
imgsize*=h;
imgsize*=count;
imgsize/=8;

后来我分析:因为20000*20000*7=2800000000,已经大于int的最大整数,所以变成了一个负随机数,再进行除以8的运算,最终的结果就是负随机数

double imgsize=20000*20000*7/8

果然,计算机的计算方式跟人脑是不一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值