Salve ragazzi,prima dell' esame ho provato a scrivere il codice di una coda.
Nulla di difficile,solo che mi fallisce sempre la reallocazione.
Sto usando mingw32 su windows 7.
codice:#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <time.h> #include <stdbool.h> #include <string.h> typedef struct { char *nome; char *cognome; }studente; char *input (void); studente *enqueue (studente *pointer,int *size); void check (void *pointer); void swap (studente *first, studente *second); void print (studente *pointer, int *size); int main(int agrc,char **agrv) { studente *pointer; int *size,i; pointer=(studente*)malloc(sizeof(studente)); size=(int*)malloc(sizeof(int)); *size=0; for(i=0;i<5;i++) { enqueue(pointer,size); } print(pointer,size); for(i=0;i<(*size);i++) { free(pointer[i].nome); free(pointer[i].cognome); } free(pointer); return 0; } char *input (void) { int ctr=0; int size=1; char *buffer; buffer=(char*)malloc(sizeof(char)); check(buffer); while(ctr!=10) { ctr=getchar(); if(ctr!=10) { buffer[size-1]=ctr; size++; buffer=(char*)realloc(buffer,size*sizeof(char)); } else buffer[size-1]='\0'; } return buffer; } studente *enqueue (studente *pointer,int *size) { int i; (*size)++; if((*size)>1) pointer=(studente*)realloc(pointer,(*size)*sizeof(studente)); check(pointer); if(pointer==NULL) { printf("Errore di allocazione della memoria.\n"); exit(0); } { for(i=(*size-1);i>1;i--) { pointer[i]=pointer[i-1]; } } free(pointer[0].nome); free(pointer[0].cognome); printf("Inserisci nome:-->"); pointer[0].nome=input(); printf("Inserisci cognome:-->"); pointer[0].cognome=input(); return pointer; } void check (void *ptr) { if(ptr==NULL) { printf("Errore di allocazione della memoria.\n"); exit(0); } } void swap (studente *first, studente *second) { studente *copy; copy=first; first=second; second=copy; } void print (studente *pointer, int *size) { int i; for(i=0;i<(*size);i++) { printf("Studente %d\t Nome: %s\nCognome: %s",i,pointer[i].nome,pointer[i].cognome); } }
Praticamente con questo codice devo chiedere in input 5 volte nome e cognome,la struttura è nome+cognome,e alloco 5 volte la struttura,però capitano questi due comportamenti:
-Delle volte dopo la terza struttura presa in input mi fallisce la realloc (ho previsto la stampa dell' errore);
-Altre volte mi prende con successo tutti e 5 gli input,però appena li ha presi avviene il segmentation fault.
Cosa potrebbe essere?

Rispondi quotando