我试图为数据包创建一个结构,并在其中放入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;