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

通用类型数组打印函数创建遇阻:现有代码报错求排查建议

通用数组打印函数常见错误排查
  • 未正确传递类型相关参数:C语言无原生泛型,用void*实现通用打印时,必须额外传入元素字节大小和对应类型的打印回调函数,示例正确实现:

    #include <stdio.h>
    #include <stddef.h>
    
    void print_array(void* arr, size_t elem_size, size_t count, void (*print_elem)(void*)) {
        char* base_ptr = (char*)arr;
        for (size_t i = 0; i < count; i++) {
            print_elem(base_ptr + i * elem_size);
            putchar(' ');
        }
        putchar('\n');
    }
    
    // 示例int类型回调
    void print_int(void* elem) {
        printf("%d", *(int*)elem);
    }
    

    若遗漏这两个参数,必然出现内存访问错误或打印乱码。

  • 指针类型转换错误:直接将void*强转为具体类型指针时,未考虑内存步长或对齐,比如用int*遍历结构体/浮点型数组,会导致内存越界或读取错误数据。

  • 调用参数不匹配:主程序调用时,元素大小传递错误(比如给double数组传sizeof(int))、回调函数签名不符(比如回调期望int*但未在内部做正确转换),都会触发运行错误。

  • 对应报错的典型原因:

    若报错segmentation fault:大概率是内存越界——要么元素大小计算错误,要么数组长度传值过大,要么回调函数访问了非法内存。
    若报错invalid type conversion:指针强转时类型不匹配,或回调函数的参数/返回值签名与定义不一致。
    若报错implicit declaration of function:未包含stdio.h(用printf)或stddef.h(用size_t)等必要头文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 12:54:57