我的部分程序如下,可是执行时:
第一层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;
第一层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;
这名句能编译过吗?
strNameCode:=pHeader^.m_pReport^.m_szName; // 此句出错!!!
那下面这句对吗?
strNameCode:=pHeader^.m_pDay; // 此句对吗?!!!
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
把所有的结构定义都包含在tagRCV_DATA 中,就没有问题了
但是Integer能够跟tagRCV_REPORT_STRUCTEx对应吗?
case Integer of
case Byte of
case Boolean of
只是一个形式
看了一下楼主提了问题,指针的问题比较多,但却不了了之,而且问又问不清楚,我想我也猜不出来,,,,,pHeader^.m_pReport^.m_szName
这个访问出错,那是因为:pHeader^.m_pReport已经给释放,或者说是根本没有进行赋值你提供的信息只能说到这个份上
pHeader和m_pReport都是指针,初始化时只是给前者分配了存储空间,而后者没有,所以访问出错。
还是楼上的意思,结构内部不要再使用指针。