Sto provando a implementare un dizionario.
Questo è il main:
Questo dizionario.c:codice:#include "prova.h" int main(int argc, char **argv) { dizionario d=creaDizionario(); aggiungiChiave(d,"a"); aggiungiChiave(d,"b"); return 0; }
Questo dizionario.h :codice:#include "prova.h" dizionario creaDizionario(void) { dizionario d=(struct __dizionario*)malloc(sizeof(struct __dizionario)); d->vettore=(chiave*)malloc(MAXLUNG*sizeof(chiave)); d->ultimo=-1; return d; } void scambiaChiavi(chiave a, chiave b) { char *t1,*t2; t1=(char*)malloc(strlen(a)*sizeof(char)); t2=(char*)malloc(strlen(b)*sizeof(char)); strcpy(t1,a); strcpy(t2,b); free(a); free(b); a=t2; b=t1; } void copiaChiave(chiave a, chiave b) { char *temp; temp=(char*)malloc(strlen(b)*sizeof(char)); free(a); strcpy(temp,b); a=temp; } void aggiungiChiave(dizionario d, chiave elem) { int i; bool out=false,error=false; for(i=0; i<= d->ultimo && !out && !error; i++) { if(strcmp(d->vettore[i],elem)>0) out=true; else if(strcmp(d->vettore[i],elem)==0) error=true; } if(!error) { d->ultimo++; for(int j=i+1 ;j<=d->ultimo;j++) copiaChiave(d->vettore[j],d->vettore[j-1]); copiaChiave(d->vettore[i],elem); } else fprintf(stderr,"La chiave non è stata aggiunta perchè era già presente\n"); } void stampaDizionario(dizionario d) { printf("Elenco parole:\n"); for(int i=0;i<=d->ultimo;i++) printf("%s\t",d->vettore[i]); printf("\n"); }
Va in segmentation fault appena aggiungo la seconda chiave.codice:#ifndef PROVA_H #define PROVA_H #include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #define MAXLUNG 1000 typedef char *chiave; typedef struct __dizionario { chiave *vettore; int ultimo; }*dizionario; dizionario creaDizionario(void); void scambiaChiavi(chiave a, chiave b); void copiaChiave(chiave a, chiave b); void aggiungiChiave(dizionario d, chiave elem); void stampaDizionario(dizionario d); #endif
Ma non so in che riga, penso comunque sia nella procedura aggiungiChiave o copiaChiave.
Non so proprio dov'è l' errore![]()
E comunque come si fa con gcc a sapere qual'è la rigna in cui va in segmentation fault, io sto compilando con un makefile:
Ma quando lo eseguo mi dice solo "segmentation fault" da terminale, senza dire la riga.codice:default: gcc -std=c99 -Wall -o prova prova.c dizionario: gcc -std=c99 -Wall -o prova prova.c dizionario.c clean: rm prova cleanall: rm prova prova.o

Rispondi quotando