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?