You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言Unity测试套件运行整型数组测试用例无输出问题排查

问题结论

你怀疑的TEST_ASSERT_EQUAL_INT_ARRAY宏签名调用错误不成立:该宏的对外调用规范就是传入3个参数,顺序为期望数组、实际数组、元素个数,你当前的传参顺序完全正确。

程序运行到该用例无输出、后续测试全部不执行,本质是进程触发段错误直接崩溃了——如果是断言逻辑不通过,Unity框架会明确打印FAIL标识、错误位置和值不匹配的详情,不会出现无输出的情况。

根因分析

崩溃点出在你自己实现的quick_sort函数上,和Unity测试宏无关:

  • 你前4个快速排序测试用例传入的全是char*字符串或char*指针数组,排序函数内部写死的按指针长度计算步长、按字符串规则比较的逻辑刚好和入参类型匹配,加上部分用例传入的数组长度为1、没有触发内存读写越界,所以能正常跑完输出PASS。
  • 到test_qs_array_three_el_int用例时,你传入的是int类型数组,单元素大小为4字节,和你排序函数内部默认按char*(64位系统下占8字节)计算的读写步长不匹配,排序过程中出现数组越界读写、非法内存访问,直接被操作系统杀死,根本走不到后面的数组断言逻辑。
验证&修复方法
  1. 临时验证宏是否正常:把test_qs_array_three_el_int里的排序调用注释,直接传入和期望值完全一致的数组测试断言:
    static void test_qs_array_three_el_int(void){
      int expected[3]={1,2,5};
      int test_arr[3] = {1,2,5};
      TEST_ASSERT_EQUAL_INT_ARRAY(expected,test_arr,3);
    }
    
    运行后该用例会正常输出PASS,可直接排除宏调用错误的可能。
  2. 修复排序函数逻辑:C语言函数无法自动识别传入数组的元素类型,如果你要让排序函数同时支持int数组、字符串数组等不同类型,需要参考标准库qsort的接口设计:
    • 新增参数传入单元素的字节宽度,交换元素时按该宽度做内存拷贝
    • 新增参数传入自定义比较函数,适配不同类型的大小比较逻辑,不要写死字符串比较
  3. 后续的test_bis_array_three_el_int用例存在完全相同的问题,给二分插入排序函数传入int数组时也会触发类型不匹配导致的越界崩溃,需要同步修复。

内容的提问来源于stack exchange,提问作者ramaswag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 14:51:20