Код
class eArp:eMac{
public:
struct t_ARPlayer{
u16 Hard;
u16 Prot;
u8 HA_Len;
u8 PA_Len;
u16 Code;
u8 MACSrc[6];
u8 IPSrc[4];
u8 MACDest[6];
u8 IPDest[4];
};t_ARPlayer * ArpLayer;
u16 fg;
eArp(u8 * data):eMac(data){
this->ArpLayer = (t_ARPlayer*)data+14;
this->fg = 16;
}
};
public:
struct t_ARPlayer{
u16 Hard;
u16 Prot;
u8 HA_Len;
u8 PA_Len;
u16 Code;
u8 MACSrc[6];
u8 IPSrc[4];
u8 MACDest[6];
u8 IPDest[4];
};t_ARPlayer * ArpLayer;
u16 fg;
eArp(u8 * data):eMac(data){
this->ArpLayer = (t_ARPlayer*)data+14;
this->fg = 16;
}
};
вот так все хорошо:
Код
eArp arp2((u8 *)EnetDmaRx[Index].pBuffer);
а вот так все плохо:
Код
eArp * arp1 = new eArp((u8 *)EnetDmaRx[Index].pBuffer);
когда программа доходит до конструктора в data адрес нормальный, и после прохождения строчки
this->ArpLayer = (t_ARPlayer*)data+14;
адрес this->ArpLayer равен 0
аналогично с полем fg, должно становиться 16. а равно нулю.