排序链表时出现分段错误

时间:2018-06-04 00:55:13

标签: c sorting pointers linked-list

所以这是我的排序函数,我不是从链表中交换信息只是下一个节点的指针。我有一个类似的功能,按照完美运行的汽车价格进行排序,当我用汽车的年份排序时,我得到了分段故障11.

void ordenaCrescenteAno(ELEMCAR *iniLista){
  ELEMCAR *aux1 = NULL;
  ELEMCAR *aux2 = NULL;
  ELEMCAR *maior = NULL;
  ELEMCAR *troca = NULL;

  if(iniLista == NULL){
    printf("Lista Vazia\n");
    return;
  }

  for(aux1 = iniLista; aux1 != NULL; aux1 = aux1 -> seguinte){
    maior = aux1;
    for(aux2 = aux1; aux2 != NULL; aux2 = aux2 -> seguinte){
       if(aux2->info.ano > maior->info.ano){
          maior = aux2;
       }
    }
    if(maior != aux1){
      troca->seguinte = aux1->seguinte;
      aux1->seguinte = maior->seguinte;
      maior->seguinte = troca->seguinte;
    }

 }
}

我要把这个链表的详细信息放在这里:

typedef struct carro{
    char matricula[7];
    char marca[30];
    char modelo[30];
    int ano;
    char classe[30];
    float preco;
    char combustivel[10];
    int dataInspecao;
    int dataRevisao;
    char observacoes[100];
    int estado;
}CARINFO;

typedef struct CarElem{
    CARINFO info;
    struct CarElem *seguinte;
}ELEMCAR;

我做错了什么?我无法理解,因为我有一个类似的功能,但我正在按“preco”变量排序。

1 个答案:

答案 0 :(得分:0)

troca初始化为null,因此troca->sequinte将出错

改为使用

struct CarElem *troca; replace troca definition

troca = aux1->sequinte; replace troca->sequinte line with this
maior->sequinte = troca; remove ->sequinte from troca

我意识到上面的代码片段是错误的。

在你的交换部分

if (maior != aux1)
{
  CARINFO carswap = aux1->info; // Copy the info into a temporary variable
  aux1->info = maior->info;     // Move info from maior to aux1
  maior->info = carswap;        // Move info from temporary variable to maior
}

希望此代码段可以满足您的需求