使用printf(%d)打印超大整数异常及数组相等测试疑问
关于int数组打印异常与断言失败的问题分析
一、数组打印出现超int范围数值的原因
你编写的数组打印函数如下:
void print_array(int size, int array[size]) { printf("{"); for (int i = 0; i < size - 1; i++) { printf("%d, ", array[i]); } printf("%d}\n", array[size - 1]); }
出现远超int范围数值的核心原因是数组越界访问:
- 这个函数完全依赖传入的
size参数控制循环范围,如果size比数组真实长度大,循环就会读取数组末尾之外的内存区域。这些区域的内存是未初始化的垃圾数据,数值完全随机,可能远超出int的取值范围,用%d打印自然会输出异常值。 - 另一种可能是数组本身被其他操作破坏——比如其他代码写入数据时越界,覆盖了数组相邻的内存,导致读取到被篡改的异常值。
二、断言失败的问题
你执行的断言代码如下:
int a = 808779818; int b = 42; assert(a == b);
断言失败是完全正常的,因为808779818和42这两个int值明显不相等。你说数组与预期答案的相等测试为真,大概率是混淆了数组比较和单个变量比较的逻辑:
- 如果你自己实现了数组相等的判断逻辑,可能存在bug(比如误把数组地址相等当成内容相等,或者循环终止条件写错,没遍历完所有元素);
- 也有可能你把数组中某个元素的值和变量
b搞混了,导致错误认为两者应该相等。
内容的提问来源于stack exchange,提问作者Sylv
相关产品推荐
相关产品推荐

