结构segfault的结构

struct of struct segfault

本文关键字:结构 segfault      更新时间:2023-10-16

我试图为数据包创建一个结构,并在其中放入ip_header和udp_header,但当它到达代码的那一部分时,它会出错。我在这个问题上纠结了很长一段时间,被难住了。

/* IP header struct */
struct ip_header{
    unsigned char       iph_ihl:5, iph_ver:4;
    unsigned char       iph_tos;
    unsigned short int  iph_len;
    unsigned short int  iph_ident;
    unsigned char       iph_flag;
    unsigned short int  iph_offset;
    unsigned char       iph_ttl;
    unsigned char       iph_protocol;
    unsigned short int  iph_chksum;
    unsigned int        iph_sourceip;
    unsigned int        iph_destip; 
};
/*UDP header struct */
struct udp_header{
    unsigned short int udph_srcport;
    unsigned short int udph_destport;
    unsigned short int udph_len;
    unsigned short int udph_chksum;
};
/* Packet struct */
struct packet{
    ip_header ip_hdr;
    udp_header udp_hdr;
    string buffer;
};
int main( int argc, char **argv )
{
    string ip_line;
    string message_line;
    get_input( ip_line, message_line );
ip_header i = create_ip_header( address, ip_line );
udp_header u = create_udp_header();
cout << "IP lent" << i.iph_len << endl;
cout << "UDP lent" << u.udph_len << endl;
packet *pkt = ( struct packet* )(i.iph_len + u.udph_len + sizeof( message_line ));

//SEGFAULTS HERE
pkt->ip_hdr = i;
pkt->udp_hdr = u;
pkt->buffer = message_line;

此行错误:

packet *pkt = ( struct packet* )(i.iph_len + u.udph_len + sizeof( message_line ));

你不能将指针设置为一组长度和大小的总和,它需要指向一个分配的对象。应该是:

packet *pkt = new packet;