I was working on my college project in C and got some problem. I used pointer to structure and used it to write in a file using fwrite but it isn't helping.Here is the code I used.
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
#include<conio.h>
struct collection{
        char *fname, *lname, *telephone, *address, *seat;   
};
collection * alloc( ){
 struct collection *r = (struct collection *) malloc (sizeof(collection*));
  r->fname = NULL;
  r->lname = NULL;
  r->telephone = NULL;
  r->address = NULL;
  r->seat = NULL;
  return (r);   
}
void string_realloc_and_copy (char **dest, const char *src){
  *dest =(char *) realloc (*dest, strlen (src) + 1);
  strcpy (*dest, src);
}
int main(){
    char ch = 'Y', temp[50];
    FILE *ptf;
    struct collection *asd;
    asd = alloc();
    //printf("%d",sizeof(asd));
    //opening file
    ptf = fopen("lang.txt","w+");
    do{   
    printf("First name: ");
    gets(temp);
    string_realloc_and_copy(&asd->fname,temp);
    printf("Last name: ");
    gets(temp);
    string_realloc_and_copy(&asd->lname,temp);
    printf("Telephone: ");
    gets(temp);
    string_realloc_and_copy(&asd->telephone,temp);
    printf("Address: ");
    gets(temp);
    string_realloc_and_copy(&asd->address,temp);
    printf("Seat you want to book: ");      
    gets(temp);
    string_realloc_and_copy(&asd->seat,temp);
    fwrite(asd,12*sizeof(collection),1,ptf);
    fflush(ptf);
    //fprintf(ptf,"\n");
    printf("Do you wish to enter another data...? (Y/N) ");
    ch = getch();
    }while((ch=toupper(ch))== 'Y');
    rewind(ptf);
        while(fread(asd,12*sizeof(collection),1,ptf) == 1){
        printf("\n\n%s",asd->fname);
        printf("\n\n%s",asd->lname);
        printf("\n\n%s",asd->telephone);
        printf("\n\n%s",asd->address);
        printf("\n\n%s",asd->seat);
    }
    fclose(ptf);    
}
It works until asd->telephone is reached it ask for address and goes unresponding. I could not figure out what i did wrong. I thought it was out of memory so i change
struct collection *r = (struct collection *) malloc (sizeof(collection*));
 to 
struct collection *r = (struct collection *) malloc (12*sizeof(collection*));
And it worked for some time and again same thing happened. I am using devC++ for compilation. Thanks in advance;
 
     
     
     
    
