首页 > 解决方案 > 由于排序功能导致的分段错误

问题描述

调用该函数会在运行时sort_array给我错误segmentation fault (core dumped)

#include <stdio.h>
#define SIZE (40)

void sort_array(unsigned char *arr[],int n)
{
    unsigned char tmp;
    for (int i=0;i<n;i++)
    {
         for(int j=i+1;j<n;j++)
         {
             if(arr[j]>arr[i])
             {
                tmp=*arr[i];
                *arr[i]=*arr[j];
                *arr[j]=tmp;
             }
         }
    }
}
int main() {

  unsigned char test[SIZE] = { 34, 201, 190, 154,   8, 194,   2,   6,
                              114, 88,   45,  76, 123,  87,  25,  23,
                              200, 122, 150, 90,   92,  87, 177, 244,
                              201,   6,  12,  60,   8,   2,   5,  67,
                                7,  87, 250, 230,  99,   3, 100,  90};
  sort_array(test,SIZE);

  for(int i=0;i<SIZE;i++)
      printf("%c ,",test[i]);

}

标签: csortingpointerssegmentation-faultruntime-error

解决方案


问题是您的函数数据类型,您不需要将其定义为unsigned char *arr[].

这里是修正版:

void sort_array(unsigned char *arr,int n)
{
    unsigned char tmp;
    for (int i=0;i<n-1;i++)
    {
         for(int j=i+1;j<n;j++)
         {
             if(arr[j]>arr[i])
             {
                tmp=arr[i];
                arr[i]=arr[j];
                arr[j]=tmp;
             }
         }
    }
}

推荐阅读