C语言烤面包机内存计算程序错误排查求助
C语言内存计算程序错误排查
核心计算逻辑分析
先明确数值推导:
- 标准
int类型单变量内存大小为sizeof(int) = 4字节(绝大多数系统) - 输入
i 36794的总字节数:36794 * 4 = 147176B
矛盾点拆解
你的程序输出143 KB and 744 B,是基于1KB=1024字节的计算机标准存储单位计算:147176 / 1024 = 143,余数147176 % 1024 = 744
而预期结果147 KB and 176 B,是基于1KB=1000字节的十进制单位计算:147176 / 1000 = 147,余数147176 % 1000 = 176
可能的错误点及修复
1. 单位转换逻辑不符合需求
如果需求明确要求使用十进制KB(1000B=1KB),检查并修改转换代码:
- 错误代码(标准存储单位):
long total_bytes = num_vars * sizeof(int); // 用long避免大数值溢出 int kb = total_bytes / 1024; int rem_b = total_bytes % 1024;
- 修改为十进制单位计算:
long total_bytes = num_vars * sizeof(int); int kb = total_bytes / 1000; int rem_b = total_bytes % 1000;
2. 确认类型大小获取正确
- 确保没有误将
sizeof(int)写成sizeof(short)(short通常为2字节),此错误会导致总字节数为36794*2=73588,转换结果与你的输出不符,可直接排除。 - 确保计算总字节数时用的是乘法而非除法,
num_vars / sizeof(int)会导致完全错误的结果,可快速排查。
3. 输入读取验证
确认程序正确读取了输入的变量数量36794,没有因为输入格式问题(比如换行、空格处理错误)读取到错误数值。
结论
如果需求遵循计算机存储标准单位(1KB=1024B),你的程序输出是正确的,预期结果存在错误;如果需求是使用十进制KB单位,修改转换时的除数和取余基数为1000即可。
内容的提问来源于stack exchange,提问作者Abishek Manoj
相关产品推荐
相关产品推荐

