合并排序程序中的分段错误

Segmentation Fault in mergesort program

本文关键字:分段 错误 排序 程序 合并      更新时间:2023-10-16

这是代码

#include<stdio.h>
#include<conio.h>
int a[3];
int b[3];
void merge(int a,int mid,int b);      //merge declaration
void mergesort(int i,int j)
{
    int mid;
    while(i<j)
    {
        mid=(i+j)/2;
        mergesort(i,mid);
        mergesort(mid+1,j);
    }
    merge(i,mid,j);
}

void merge(int c,int mid,int l)               //c-first index,l,last index
{
    int k=0;
    int i=c;
    int j=mid+1;
    while((i<mid) && (j<l))
    {
        if(a[i]>a[j])
            b[k++]=a[j++];
        else
            b[k++]=a[i++];
    }
    while(i<mid)
    {
        b[k++]=a[i++];
    }
    while(j<l)
        b[k++]=a[j++];
}
int main()
{
    int i;
    a[0]=3;
    a[1]=2;
    a[2]=4;
    mergesort(0,2);
    for(i=0;i<3;i++)
        printf("the nums are=%dn",b[i]);
}

预期输出为

the nums are=2
the nums are=3
the nums are=4

a数组和b数组的长度为 3 个成员,但在merge中使用实际值作为索引