Ошибка сегментации при сортировке связанного списка - PullRequest
0 голосов
/ 04 июня 2018

Так вот моя функция сортировки, я не обмениваю информацию из связанного списка только указателями на следующий узел.У меня есть аналогичная функция, которая сортирует по цене автомобиля, который работает отлично, когда я использую сортировку по году выпуска автомобиля, я получаю ошибку сегментации 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 голосов
/ 04 июня 2018

troca инициализируется нулем, поэтому 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
}

Надеюсь, что этот фрагмент кода делает то, что вам нужно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...