c - 为什么错误 "Segmentation fault"在这里?

标签 c segmentation-fault

<分区>

我尝试实现选择排序的递归形式。但是显示为“段错误”的错误。错误在哪里?递归算法通常会遇到哪些错误?

#include <stdio.h>
void ssort(int[],int,int);
void prints(int[],int);
void sorting(int[],int,int);

int a[]= {5,6,3,1,2,4};

int main()
{
    ssort(a,0,6);
    prints(a,6);
    return 0;
}

void ssort(int a[],int s,int e)
{
    int min=a[s];
    int ch,p,j;
    for(j=s+1; j<e; j++)
    {
        if(min>a[j])
        {
            min=a[j];
            ch=j;
        }
    }
    sorting(a,j,ch);
    if(s+1<e)
    {
        ssort(a,s+1,e);
    }
}


void prints(int a[],int n)
{
    int i;
    for(i=0; i<n; i++)
        printf("%d",a[i]);
}

void sorting(int a[],int j,int ch)
{
    int p=a[j];
    a[j]=a[ch];
    a[ch]=p;
}

最佳答案

访问非法内存时会抛出段错误。有可能“排序(a,j,ch);”即使代码可能没有通过前置 for 循环内的 if block ,也可能会被调用。在那种情况下,“ch”的值可能是不可预测的,然后当你在 sorting(..) 函数中访问 a[ch] 时,它可能会访问一些非法内存,这将导致段错误

关于c - 为什么错误 "Segmentation fault"在这里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38928583/

相关文章:

c - iconv:从UTF-16BE转换

c - C 中的段错误?

c++ - 删除 [] 导致段错误?

c - c : unsigned int to float 中的类型强制

c - 获取输入时出错

c++ - 使用#define 的最大数组大小

c++ - 在 C++ 中将对象存储在另一个对象中的正确方法?

c - 为什么 c 允许在不声明的情况下初始化字符串?

c - 即使有有效的 IP,gethostbyaddr 也会返回 NULL

c++ - 为什么 `(a--> 0)` 和 `((a--) > 0)` 相同?