记一个烦了我一下午到半夜的编程错误!free(): invalid next size (fast): 0xb73004e8 ***

调试了半天,定位到是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[]组合


你可能感兴趣的:(记一个烦了我一下午到半夜的编程错误!free(): invalid next size (fast): 0xb73004e8 ***)