Sto provando alemno a sviluppare una lista normale, seguendo un esempio trovato proprio su html.it ma semplificandolo (nel manuale del C parla delle liste ma fa un esempio molto complesso) però lo compila e crasha inspiegabilmente.
Ho tre file, il main.c, funzioni.c (contenente le funzioni di inserimento), funzioni.h (contenendo le definizioni delle strutture), e sono le seguenti:
main.c
funzioni.hcodice:#include <stdio.h> #include <stdlib.h> #include "funzioni.h" int main(int argc, char *argv[]) { struct elemento *lista = NULL; lista = aggiungiContatto(lista); system("PAUSE"); return 0; }
funzioni.ccodice:/*Elementi pubblici della libreria funzioni*/ //Struttura dati struct elemento { float inf; struct elemento *pun; }; //Prototipi funzioni struct elemento *aggiungiContatto(struct elemento *p);
Il programma arriva a leggere il float e poi crasha inspiegabilmente.codice:#include <stdio.h> #include <stdlib.h> #include "funzioni.h" struct elemento *aggiungiContatto(struct elemento *p) { // aggiungiContatto() - OPEN // Dichiaro le variabili float daInserire; struct elemento *punt; // Popolo la variabile daInserire printf (" Float > "); scanf ("%f", daInserire); if(p != NULL) { // IF - OPEN /* creazione elementi successivi */ // Alloco la memoria necessaria punt = (struct elemento *)malloc(sizeof(struct elemento)); // Metto daInserire nell'informazione del puntatore punt->inf = daInserire; // Metto il puntatore in testa alla lista punt->pun = p; } else { // ELSE /* creazione primo elemento */ // Alloco la memoria necessaria p = (struct elemento *)malloc(sizeof(struct elemento)); // Metto daInserire nell'informazione del puntatore p->inf = daInserire; // p punta a NULL, ovvero il marcatore di fine lista p->pun = NULL; // Assegno p a punt punt = p; } // IF - CLOSE // Esce dalla funzione e restituisce la lista return(punt); }


Rispondi quotando