[comp.lang.c] help needed fread'ing data into a buffer using Turbo C++ and huge model

adh@uafcseg.uucp (Alvis Harding Jr.) (09/26/90)

Hello Netlanders!

As the subject says, I'm having some trouble reading data into an 80K buffer, 
or any buffer larger than 64K actually, using fread.  I'm using the huge 
model.  The code goes something like this...

#include <all.the.necessary.includes>

main()
{ unsigned char *buffer, *cptr;
  int i;
  FILE *infile;

  infile = fopen( "afile.dat", "rb" );

  buffer = (unsigned char *) farmalloc( 81920 );

  for (i=0, cptr=buffer; i<320; i++, cptr += 256 )
     { fread( (void *) buffer, sizeof( char ), (size_t) 256, infile );
       printf("row: %d, farheap status: %d\n", i, farheapcheck( ));
     } 
}

For the curious, there is an fseek before the fread to correctly 
position the file pointer in the original program.

Everything works fine up until it reads in row 255, the piece of data which
is crossing the segment boundary.  Farheapcheck() then reports that the heap
is corrupt.  I was under the impression that since I'm using the huge model
that ALL pointers are normalized and that data can occupy more than 64K.  Is
this a problem with fread?  If I remember correctly, I didn't have this 
problem with Microsoft C 5.0.  Any suggestions would be appreciated.
       
Thanks in advance.

                                                  -Alvis