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

如何解决C++混洗数据集后打印输出出现segmentation fault的问题

Segmentation Fault 问题修复方案

核心错误原因

段错误由打印阶段的二维数组索引逻辑错误直接导致:

  • 你定义的array_X_set是二级指针结构,总长度为5430,每个元素指向一个长度为20的int数组,赋值阶段使用的array_X_set[i][j](表示第i个样本的第j个特征)逻辑完全正确。
  • 打印阶段使用的array_X_set[i + j * 5430]存在严重越界:当j≥1时,i + j * 5430的取值最小为5430,已经超过了array_X_set的合法下标范围(0~5429),访问非法内存直接触发段错误。

修复方法

直接修改打印循环内的array_X_set索引逻辑即可,修改后的代码段如下:

printf("printout the whole dataset after random mixing:\n");
for (int i = 0; i < 5430; i++) {
    printf(" %d ", i);
    for (int j = 0; j < 20; j++)
        // 替换为和赋值逻辑一致的二级指针访问方式
        printf(" %d ", array_X_set[i][j]);
    printf(" %d ", array_Y_set[i]);
    printf("\n");
}

可选优化点

  • 你当前使用的rand()没有初始化随机种子,每次运行程序打乱数据集的顺序都完全一致,建议在调用mix_dataset前添加srand(time(nullptr));(需引入<ctime>头文件),实现每次运行的打乱结果不同。
  • 程序结束前记得释放动态申请的内存,避免内存泄漏:先循环释放array_X_set的每一行指针,再释放array_X_set本身,最后释放array_Y_set。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:39:02