我定义了一个动态数组 stExam:array of ^Exam;Exam 的结构是这样的:Exam=record
                   cStuID: array[0..11] of ansichar;
                      fScore:single;         
                      BAnswer:array[0..163] of Byte;                    
                   fUnit:array[0..163] of single;                       
                      end;动态分配了十个空间给stExam
SetLength(stExam,10);
        for i:=0 to 9 do
        begin
                new(stExam[i]);        end;
然后读文件的数据.DATNumRead:=1;
Reset(bFile,1);
BlockRead(bFile,stExam,sizeof(Exam)*10,NumRead);///这里出错 EinoutError  IO998 当我把stExam改为静态结构体数组时,一样的代码,它就没有错误了,数据能够正确读出。
郁闷很久,不知何故,愿高人指教

解决方案 »

  1.   

    stExam这是一个指针数组,然后对各指针元素分配内存之后,内存是非连续的,所以不支持连续读取,这是问题一;你的参数使用的是stExam,这只是数组指针的首地址,而并非实际分配的结构内存首地址,读取时内存访问违例.对于这种情况可以使用stExam:array of Exam定义,BlockRead的时候传stExam[0]的首地址.
    或者将stExam定义为array[0..MAXINT]of Exam;
    然后对stExam使用GetMem等进行内存分配(释放时配对)也可以,并且是比较建议的.
      

  2.   

    stExam是定义为array[0..MAXINT] of Exam的指针类型.
      

  3.   

    ...
    type
      Exam = record 
        cStuID: array[0..11] of ansichar; 
        fScore:single;         
        BAnswer:array[0..163] of Byte;                   
        fUnit:array[0..163] of single;                       
      end;   PExamList = ^TExamList;
      TExamList = array[0..Maxint div 16 - 1] of Exam;
    ...
    var
      stExam: PExamList;
    ...