我的部分程序如下,可是执行时:
第一层pHeader^.m_wDataType 没问题,
第二层pHeader^.m_pReport^.m_szName 出错,为何???
出错信息"access violation at address 0044EF4E in module stock.EXE . Read of address FFFFFFFF"type PRCV_REPORT_STRUCTEx = ^tagRCV_REPORT_STRUCTEx;
 tagRCV_REPORT_STRUCTEx = record     m_szLabel : array[0..255] of char;
     m_szName : string[0..255] of char; end;
    
 PRCV_DATA = ^tagRCV_DATA;
 tagRCV_DATA = record
      m_wDataType : integer;
      case Integer of
        0: ( m_pReport : PRCV_REPORT_STRUCTEx );
        1: ( m_pDay : real );
 end;var
    pHeader : PRCV_DATA;
    
procedure TForm1.ShowStock(LPara:longint);
var
  strNameCode:string;
begin
     pHeader := PRCV_DATA(lPara);
     strNameCode:=inttostr(pHeader^.m_wDataType); // 此句没问题!!!
     strNameCode:=pHeader^.m_pReport^.m_szName; // 此句出错!!!
end;

解决方案 »

  1.   

    m_szName : string[0..255] of char;   ????????
    这名句能编译过吗?
      

  2.   

    sorry,写错了,是 m_szName:array[0..255] of char;为何出错???
      

  3.   

    strNameCode:=inttostr(pHeader^.m_wDataType); // 此句没问题!!!
         strNameCode:=pHeader^.m_pReport^.m_szName; // 此句出错!!!
    那下面这句对吗?
         strNameCode:=pHeader^.m_pDay; // 此句对吗?!!!
      

  4.   

    把    case Integer of
            0: ( m_pReport : PRCV_REPORT_STRUCTEx );
            1: ( m_pDay : real );
    改成:      case Integer of
            0: ( m_pReport : tagRCV_REPORT_STRUCTEx);
            1: ( m_pDay : real );
    访问的时候:
         pHeader^.m_pReport.m_szName
      

  5.   

    m_pReport只是记录了一个PRCV_REPORT_STRUCTEx结构的指针地址,其内部结构对应的内存说不定早就释放了
    把所有的结构定义都包含在tagRCV_DATA 中,就没有问题了
      

  6.   

    lincanwen(Too Two To) ,你的概念没有错,即结构中包含结构而不是指针
    但是Integer能够跟tagRCV_REPORT_STRUCTEx对应吗?
      

  7.   

    pascal就是使用case来实现共用体的实现的,所以
    case Integer of
    case Byte of
    case Boolean of
    只是一个形式
    看了一下楼主提了问题,指针的问题比较多,但却不了了之,而且问又问不清楚,我想我也猜不出来,,,,,pHeader^.m_pReport^.m_szName 
    这个访问出错,那是因为:pHeader^.m_pReport已经给释放,或者说是根本没有进行赋值你提供的信息只能说到这个份上
      

  8.   

    我觉的 copy_paste(木石三)说的很对,pHeader^.m_pReport根本就没有被赋值,你要访问他自然会出错,所以建议record中不要再用指针为好。
      

  9.   

    pHeader^.m_pReport^.m_szName 中
    pHeader和m_pReport都是指针,初始化时只是给前者分配了存储空间,而后者没有,所以访问出错。
    还是楼上的意思,结构内部不要再使用指针。