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
codice:
#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.h
codice:
/*Elementi pubblici della libreria funzioni*/

//Struttura dati
struct elemento
{
  float inf;
  struct elemento *pun;
};
//Prototipi funzioni
struct elemento *aggiungiContatto(struct elemento *p);
funzioni.c
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);

}
Il programma arriva a leggere il float e poi crasha inspiegabilmente.