У меня появляется ошибка: 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;
}
Твоя проблема 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.