Newsgroup: it.comp.lang.c
Titolo: Aiuto.... malloc

Sto svolgendo un progetto di algo e strutt dati
riguarda l'inserimento di parole in una strutture che deve simulare un
dizionario. riesco ad inserire la prima parola nell'array di liste che
mi sono creato.... ma quando vado ad inserire la seconda (e
precisamente quando alloco memoria per un nuovo nodo) ricevo un errore
di "Segmentation fault" qualcuno mi sa dire che errore faccio?
(allego il codice che ho scritto fin'ora)
                                                 Grazie
P.S. il messagio d'errore è evidenziato nel corpo del metodo
creaNodo().
#include <stdio.h>
#include <stdlib.h>
#include "dizionario.h"
#include <string.h>
/* Strutture dati*/
typedef struct lista{
    int lunghezza;
    char *parola;
    struct lista *next;
}nodo;
typedef nodo* STRUT;
/*Intestazione funzioni */
void carica(char *fname);
void visualizza(void);
void inserisci(char *word);
void elimina(char *word);
void ricerca(char *pattern);
int distanza(char *x, char *y);
/* Funzioni strutture dati */
STRUT creaNodo(void);
STRUT inserisciNodo(char *stringa,int lung, STRUT str);
void eliminaNodo(char *stringa, STRUT str);
STRUT cercaNodo(char *stringa);
void inserisciTab(char *word);
STRUT tab[26];
int main(void){
    char command;
    char str1[40];
    while((scanf("%c",&command))!=-1){
        switch(command){
        case 'c':    scanf("%s",&str1);
                     carica(str1);
                break;
        case 'v':
                break;
        case 'i':   scanf("%s", &str1);
                    inserisci(str1);
                break;
        case 'e':
                break;
        case 'r':
                break;
        case 'd':
                break;
        case 'f': printf("\n");
                return 0;
        }
    }
  return -1;
}
/**************************************************/
/* Funzioni per la gestione delle operazioni base */
/**************************************************/
void carica(char *fname){
    FILE *fp;
    char *strTmp,*strTmp1;
    char token[]=" \n";
    fp=fopen(fname,"r");
    while((getc(fp))!=EOF){
        strTmp=strtok(fp->_base,token);
                inserisciTab(strTmp);
                while((strTmp1=strtok(NULL,token))!=NULL){
                        inserisciTab(strTmp1);
                }
                break;
    }
}
/*************************************************/
/* Funzioni per la gestione delle strutture dati */
/*************************************************/
void inserisci(char *word){
    inserisciTab(word);
}
STRUT creaNodo(void){
  /*Il messagio d'errore appare nell'istruzione*/ 
  /*successiva, al secondo tentativo di inserimento*/
  STRUT tmp=malloc(sizeof(STRUT));
  tmp->next=NULL;
  return tmp;
}
STRUT inserisciNodo(char *stringa,int lung, STRUT l){
        STRUT cella=creaNodo();
        strcpy(cella->parola,stringa);
        cella->lunghezza=lung;
        cella->next=l;
        return cella;
}
void inserisciTab(char *word){
    char swChar;
    int asciiVal,index,strLen;
    strLen=strlen(word);
    swChar=word[0];
    asciiVal=swChar;
    index=asciiVal-97;
        tab[index]=inserisciNodo(word,strLen,tab[index]);
}

 }
Metti sizeof(nodo) e vedrai che funzionerà a meraviglia.
[PR]
Ci credi se ti dico che sulle prime ho preso STRUT per struct.....
Mi sa che è ora di andare a nanna! :)
[/PR]
Buonanotte!
-- 
Molebio