调试了半天,定位到是delete引起的奔溃,我怀疑了好久是不是申请内存后,指针操作出了问题,导致向没申请的内存区域写入了东西,导致释放出了问题。
可是这个delete有时候出问题,有时候又不会。
后来在校论坛上发帖,得到了提醒。可能是我申请内存和释放内存的语句出了问题,我居然之前没想到过这一点。
是这样的:
我原来的代码为:
char *msg2 = new char(2+(sp->first).size()+sizeof(in_addr_t)+sizeof(in_port_t));释放代码为:
delete msg2; //这里delete的时候程序会崩溃,为什么呢?
因为我通过msg2指针操作了不属于我申请的内存。
char *msg2 = new char[2+(sp->first).size()+sizeof(in_addr_t)+sizeof(in_port_t)];正确的释放代码应该为:
delete []msg2;
注意new后面()和[]的区别。
申请内存应该是
char *p = new char[10] ;//假设是申请10个字节
而char *p = new char(10);//是申请一个字节的内存,并把这个字节的内存赋值10
区别太大了。
而释放的时候应该是
new和delete组合
new[]和delete[]组合