Premetto che quanto segue lo sto compilando con il vecchio Turbo C++ 3.0

codice:
#include <stdio.h>
#include <mem.h>

void main()
{
  FILE *fstream;
  int dim_file,x;
  char *my_buffer;


  if(!(fstream = fopen("prova.txt","rt")))
    printf("Errore in apertura del file.\n");
  else
    printf("File aperto correttamente.\n");

  fseek(fstream, 0, SEEK_END);
  dim_file = ftell(fstream);

  printf("Il file %c lungo %d caratteri.\n", 138,dim_file);

  rewind(fstream);
  my_buffer = (char *) malloc((sizeof(char)*dim_file)+1);
  my_buffer[dim_file] = 0;    

  if(fread(my_buffer, sizeof(char), dim_file, fstream) < dim_file)
    printf("Errore nella lettura del file.\n");
  else
    printf("File letto correttamente.\n");
  
  printf("La stringa %c:\n%s\n", 138, my_buffer);  
  
  getch();

  fclose(fstream);
  free(my_buffer);

  return;
}
Praticamente:
- apro un file di testo
- ne controllo la lunghezza
- creo uno spazio in memoria grande quanto il file + un ulteriore byte alla fine.
- leggo il contenuto del file e lo metto nello spazio creato
-stampo il file a video

Ora, nel mio codice ci deve essere qualche problema perchè pur compilandolo senza errori, quando lo avvio la finestra del DOS mi si chiude immediatamente nonostante il getch(), segno che qualcosa manda in tilt l'esecuzione del programma.

Ho motivo di pensare che il problema stia nell'uso della funzione malloc o nel modo in cui fread riempie lo spazio da essa allocato perchè ho notato che se il file contiene meno di 28 caratteri tutto funziona perfettamente... aggiungo un carattere al file di testo, lo salvo, faccio ripartire il programma e tutto va in tilt come prima