(分段错误)c中快速排序代码中的堆芯转储

(分段错误)c中快速排序代码中的堆芯转储,c,C,我已经为快速排序编写了代码。它在某些情况下运行良好,但在大多数情况下会导致核心转储问题。大多数情况下是长输入>10,已经是大排序数组。为什么会这样 这是我的密码 #include<stdio.h> void quicksort(int arr[],int s,int l) { int temp; if(l-s <= 1) return ; int i=s+1,j=s+1; for(i;i<l;i++) { i

我已经为快速排序编写了代码。它在某些情况下运行良好,但在大多数情况下会导致核心转储问题。大多数情况下是长输入>10,已经是大排序数组。为什么会这样

这是我的密码

#include<stdio.h>

void quicksort(int arr[],int s,int l)
{
    int temp;

    if(l-s <= 1) return ;

    int i=s+1,j=s+1;

    for(i;i<l;i++)
    {
        if(arr[i]<=arr[s])
        {
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
            j++;
        }
    }

    temp = arr[j-1];
    arr[j-1] = arr[s];
    arr[s] = temp;  
    quicksort(arr,s,j);
    quicksort(arr,j,l);
}
int main()
{
    int arr[50],n,i;
    scanf("%d",&n);

    for(i=0;i<n;i++)
    scanf("%d",&arr[i]);

    quicksort(arr,0,n);
for(i=0;i<n;i++)
    printf("\n%d\n",arr[i]);

}
#包括
无效快速排序(int arr[],int s,int l)
{
内部温度;
如果(l-s纠正该行(删除“=”)

if(arr[i]更正行(删除“=”)


if(arr[i]向我们展示您是否使用了调试器来尝试自己查找问题?至少它会告诉您导致segv的代码行,甚至是printf调试语句。如果您已经这样做了,请提供结果。您运行该调试器时,
n
最多为50?除了缺少检查
>n
不超过50我觉得你的代码很好。但是最好使用有意义的变量名!显示导致崩溃的最小样本数据集…向我们显示你是否使用了调试器来尝试自己查找问题?至少它会告诉你导致segv的代码行。甚至还有printf调试语句。如果你有e已经这样做了,那么请提供结果。您运行时,
n
最多为50?除了缺少检查,
n
不超过50之外,您的代码对我来说很好。但是最好使用有意义的变量名!显示导致崩溃的最小样本数据集…您能详细说明一下为什么会这样吗它将进入一个无限循环?这一更改肯定使代码对我起作用,在以前崩溃的7个数字集上,以及在其他以前崩溃的多达20个随机元素集上。当任何数字重复时,都会生成core。这个问题也可能发生在两个数字上。首先输入2,然后给出1和1,您可以看到core是一段时间后生成。2输入和两者都是一种情况,首先调用快速排序(arr,0,n);在这种情况下,当调用快速排序(arr,s,j)时,s=0和l=2;s=0和j=2,因此使用相同的参数调用函数quicksort,因此它将永远重复…请您详细说明一下为什么它会进入无限循环?这一更改确实使代码对我起作用,在以前崩溃的7个数字集上,以及在其他以前崩溃的多达20个随机元素集上。核心是ge当您重复任何数字时会生成。此问题也可能发生在两个数字上。首先输入2,然后给出1和1,您可以看到在一段时间后会生成core。2输入和两者都是一种情况,首先调用快速排序(arr,0,n);在这种情况下,当您调用快速排序(arr,s,j)时,s=0和l=2;s=0和j=2,因此使用相同的参数调用函数quicksort,因此它将永远重复。。。。
if(arr[i]<=arr[s])
if(arr[i]<arr[s])