c - 尝试运行程序时出现段错误

标签 c arrays pointers segmentation-fault

这个程序使用快速排序对数字进行排序,然后是交替放置负数和正数的代码。

#include<stdio.h>
#include<stdlib.h>

void swap(int *arr,int i,int j)
{
    int temp=arr[i];
    arr[i]=arr[j];
    arr[j]=temp;
}


int partition(int *arr,int left,int right)
{
    int temp=0;
    int i=left;
    int j=right;

    while(i<=j)
    {
        while(i<=right && arr[i]<=temp)
        i++;
        while(j>=left && arr[j]>=temp)
        j--;
        if(i<j)
        swap(arr,i,j);
    }
 return j;
}

void quick_sort(int *arr,int left,int right)
{
    if(left<right)
    {
        int pivot=partition(arr,left,right);
        quick_sort(arr,left,pivot-1);
        quick_sort(arr,pivot+1,right);
    }
    return ;
}

void nega(int *arr,int left,int right)
{
    int i;

    quick_sort(arr,left,right);

    for(i=0;i<right+1;i++)
    {
        if(arr[i]>=0)
        break;
    }
    int j=i;
    int k;
    for(i=1,k=j;i<j && k<=right;i+=2,k++)
    {
        int temp=arr[i];
        arr[i]=arr[k];
        arr[k]=temp;
    }
}


int main()
{
  int i,n;
  int arr[15];

  printf("enter the n:");
  scanf("%d",&n);

  for(i=0;i<n;i++)
  {
  printf("enter the element");
  scanf("%d",&arr[i]);
  }
    printf("debug");
   nega(arr,0,n-1);
    for(i=0;i<n;i++)
    printf("%d",arr[i]);
return 0;
}

这里的代码要求用户输入 n 的值,并将 n 个元素放入数组中。 如果 n 的值为 1(即,对于一个元素)它工作正常。 如果 n > 1 的值(对于超过 1 个元素)。它显示段错误。可能在它访问无法访问的位置的函数中的某处。

但是,我不明白为什么它不是在输入代码后立即执行 printf("debug"); 而是在执行 printf( "debug"); 而且在 printf("debug"); 之前我没有找到任何导致段错误的原因。

谁能指出我的问题所在。谢谢。

最佳答案

for(i=0;i<right+1;i++)
{
    if(arr[i]>=0)
    break;
}

这部分看起来很可疑。权利永远是最后一个要素吗?

关于c - 尝试运行程序时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19873885/

相关文章:

javascript - 来自匿名函数的错误 : unexpected token <

C - 链表

c++ - 为 __stdcall 函数指针提供比预期更多的参数

c - 结构在 C 中未按预期工作

c - 用C打开文件,如果存在则覆盖

javascript - 删除所选之前数组中的所有元素

javascript - 临时变量未存储在 Javascript 中

c++ - C++中的**是什么?

c - 为什么你会想要在堆上有一个数组?

c - 接受主要论点