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?