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

C++实现选择排序交换数组内容时出现段错误问题求助

段错误及代码问题原因梳理
  • 核心段错误诱因:参数类型与传参逻辑完全不匹配
    你定义的selection_sort第一个参数int* m[]本质是int**类型,代表存储int指针的数组;但你实际的sel_nums是指向动态申请的int数组首元素的指针,你传入的&sel_nums是指针变量sel_nums本身的内存地址,仅对应1个指针大小的合法存储空间。当你在函数中访问m[1]、m[2]等下标时,属于直接越界访问未申请的非法内存,直接触发段错误。
  • 语法逻辑错误:外层for循环缺失花括号
    你写的外层循环for (int i = 0; i < array_size; i++)后没有加{},循环体仅包含int min_ind = i;这一行代码,后续的内层循环、元素交换逻辑都只会在i=0时执行1次,即便参数修复也无法完成排序。
  • 排序逻辑错误:比较的是指针地址而非元素值
    你原代码中的比较逻辑m[min_ind] > m[j]是在比较两个指针的内存地址,而非指针指向的数组元素数值,即便参数和循环都修正,也无法得到正确的排序结果。
修复方案

1. 调整函数定义与传参逻辑

将排序函数的第一个参数改为接收普通int数组(本质退化为int指针):

// 两种写法等价,都是接收int数组首指针
void selection_sort(int m[], int array_size)
// 或 void selection_sort(int* m, int array_size)

调用时直接传入数组首指针即可,不需要取地址:

selection_sort(sel_nums, x);

2. 修正排序函数内部逻辑

补全外层循环的花括号,调整比较、交换逻辑为直接操作数组元素:

void selection_sort(int* m, int array_size) {
    // 外层循环补全花括号包裹所有逻辑
    for (int i = 0; i < array_size; i++) {
      int min_ind = i;
      for (int j = i+1; j < array_size; j++){
        // 直接比较元素值而非指针地址
        if (m[min_ind] > m[j]){
            min_ind = j;
        }
      }
      // 直接交换元素值,不需要额外解引用
      int temp = m[i];
      m[i] = m[min_ind];
      m[min_ind] = temp;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 11:54:00