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);
    }
}
[/QUOTE]

in enqueue dopo allocato il puntatore prima fai check e poi lo ricontrolli. Te lo potresti risparmiare (Era solo un appunto)

Cmq il codice sembrebbe apposto.
Ma quando dici che fallisce l'allocazione, esce semplicemente scrivend errore nell'allocazione oppure va in segment fault senza errore ?