Salve, vi scrivo per sapere se qualcuno di voi mi può aiutare a risolvere un problema riscontrato nella compilazione di un programma in c riguardante le strutture linkate.
struct data
{
char nome [20];
struct data *NEXT ;
};
typedef struct data LISTANOMI ; /* Lista di nomi del tipo */
typedef struct data *LINK ;
LINK head = NULL ; /*Inizio Lista (Head)*/
LINK newelem = NULL ; /*Nuovo Elemento della Lista (Newelem) */
LINK current = NULL ; /*Posizione corrente nella Lista (Current)*/
/* Funzione per visualizzare la schermta prima di passare alla successiva */
void insertend()
{
char name[20];
current = head;
while (current -> NEXT != NULL)
{
current = current -> NEXT;
}
/* Alloca la casella contente il valore da inserire nella lista */
newelem=(LINK)malloc(sizeof(LINK));
current -> NEXT = newelem;
newelem -> NEXT = NULL;
printf("\nInserire nome da accodare alla lista: ");
scanf("%s",name);
strcpy(newelem -> nome, name);
printf("\n");
}
void erase()
{
/* Variabile logica inizializzata su falso */
int trovato=0;
/* Variabile che indica l'elemento da trovare */
char key[25];
/* Torna ad inizio Lista */
current = head;
/* Inserisci la chiave di ricerca dell'eliminazione del file */
printf("\nQuale nome vuoi eliminare?");
scanf("%s",key);
do
{
if ( strcmp(current -> nome,key) == 0 )
{
printf("Eccolo!");
trovato = 1;
}
current = current -> NEXT;
}
while ((current != NULL) && (trovato == 0));
if (trovato == 0)
printf ("\nElemento non trovato!!!");
}
void displaylista ()
{
/* Indice contatore inizializzato a 0 */
int i=0;
/* Cambia la posizione corrente con la testa, in modo da trovarsi in testa alla lista
*/
current = head ;
/* Stampa un form a video che contenga la lista */
printf ("\n" );
printf ("Lista corrente\n" );
/* Ciclo while che stampa gli elementi della lista */
while (current != NULL )
{
/* Contatore che permette la visualizzazione della posizione */
/* di un elemente nella lista
*/
i++;
/* Stampa a video la posizione dell'elemnto nella lista */
printf ("%d " ,i);
/* Stampa gli elementi nella lista */
printf ("> %s\n" , current -> nome );
/* Avanza nella lista */
current = current -> NEXT ;
}
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "liste_menu.c" /* Carica le procedure delle funzioni */
main ()
{
int scelta;
printf ("Scegli l'operazione da eseguire:\n\n" );
printf (" 2 - Accoda un elemento nella lista\n" );
printf (" 3 - Cancella un elemento\n" );
printf (" 4 - Visualizza la lista \n" );
printf ("\n" );
printf ("Scegli: " );
scanf ("%d" ,&scelta );
switch (scelta )
{
case 2:
insertend (); /* Inserisci in coda alla lista */
break ;
case 3:
erase (); /* Cancella un elemento dalla lista */
break ;
case 4:
displaylista (); /* Visualizza la lista */
break ;
}
return 0;
}
Non riesco ad individuare l'errore, che sicuramente sarà dovuto ad una mal allocazione di memoria o ad un uso non proprio dei puntatori; il messaggio di errore visualizzato è il seguente: "Errore di segmentazione (core dump creato)".
Vi ringrazioe anticipatamente