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

size_t与int作为函数参数的区别?快速排序用size_t报core dumped原因

问题核心原因

你的程序崩溃本质是无符号整数size_t的下溢特性导致的逻辑错误,具体触发流程如下:

  • size_t是C/C++标准定义的无符号整数类型,数值永远不会为负,当你对值为0的size_t变量执行减1操作时,会发生整数下溢,最终得到该类型能表示的最大值(32位环境下为4294967295,64位环境下为18446744073709551615)。
  • 你的快排递归逻辑中,当pivot等于start(即分区后基准值落在当前区间最左侧)时,调用quicksort(numbers, start, pivot - 1)就会触发上述下溢:此时pivot-1变成一个极大的正整数,远大于start的值。
  • 递归终止条件if(end > start)会被误判为成立,程序进入非法递归分支,访问vector时索引远远超出容器实际长度,最终触发越界错误导致core dumped。
换成int正常运行的原因

int是有符号整数类型,当pivot为0时pivot-1的结果是-1,此时end=-1、start=0,end > start的条件不成立,递归会正常终止,不会触发非法越界访问。

保留size_t的正确写法

不需要强制换成int,只要调整递归分支的触发条件即可避免下溢问题:

void quicksort(std::vector<int>& numbers, size_t start, size_t end)
{ 
    if(end > start){
        size_t pivot = partition(numbers, start, end);
        // 仅当左区间合法(pivot左侧还有元素)时递归左半部分
        if (pivot > start) {
            quicksort(numbers, start, pivot - 1);
        }
        // 仅当右区间合法(pivot右侧还有元素)时递归右半部分
        if (pivot < end) {
            quicksort(numbers, pivot + 1, end );
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 10:54:05