Ошибка: Segment fault

У меня появляется ошибка: segmentation fault SIGSEGV... ошибка прокомментирован в коде. как кажется, ошибка находится в функции insetarLista, так как в момент вхождения в нее, программа "теряется”

#include <iostream>
#include <string.h>
#include <stdlib.h>
using namespace std;

struct Nodo1{
    int dato;
    Nodo1 *siguiente;
};

void insertarLista(Nodo1 *&, int);
void menu();

int main(){
    menu();
    return 0;
}

void menu(){
    Nodo1 *lista = NULL;
    int opcion, dato;

    do{
        cout << "1. Insertar elementos a la lista"<<endl;
        cout << "2. Mostrar elementos de la lista"<<endl;
        cout << "3. Salir"<<endl;
        cout << "Opcion: ";
        cin >> opcion;

        switch (opcion){
            case 1: cout << "Digite el numero a aniadir: ";
                    cin >> dato;
                    insertarLista(lista,dato);
                    break;
            case 2: cout << "Los elementos son: ";
                    mostrarLista(lista);
                    break;
        }   
    }while(opcion!=3);
}

void insertarLista (Nodo1 *&lista, int n){
    Nodo1 *nuevo_nodo1 = new Nodo1();
    nuevo_nodo1->dato = n;

    Nodo1 *aux1 = lista;
    Nodo1 *aux2;

    while ((aux1 != NULL) && (aux1->dato < n)){
        aux2 = aux1;
        aux1 = aux1->siguiente;
    }

    if (lista = aux1){
        lista = nuevo_nodo1;
    }else{
        aux2->siguiente = nuevo_nodo1;//aqui el error
    }
    nuevo_nodo1->siguiente = aux1;
}
5
задан 30.06.2019, 04:54
1 ответ

Твоя проблема estГЎ в if (lista = aux1).

EstГЎs делая одна asignaciГіn вместо одной comparaciГіn (==).

Первый раз, что ты добавляешь узел, lista - null, ты распределяешь этот null aux1 и в if ты распределяешь снова null lista.

Результат одной asignaciГіn в одном if - конечная стоимость распределенной переменной: lista, которые стоят null или 0, что равняется false, тогда вводит else, где ты стараешься называть aux2->siguiente, но aux2 в этом моменте tambiГ©n - null, потому что когда бы то ни было entrГі в while, потому что aux1 был null. И asГ - ты получаешь segmentation fault.

И как совет, старается использовать nullptr вместо NULL, и tambiГ©n включать <string>, не <string.h>, если ты сделаешь что-то с strings.

1
ответ дан 02.12.2019, 00:06

Теги

Похожие вопросы