遂上网搜索,引用一下别人的文章:
*** glibc detected *** free(): invalid pointer:
*** glibc detected *** malloc(): memory corruption:
*** glibc detected *** double free or corruption (out): 0x00000000005c18a0 ***
*** glibc detected *** corrupted double-linked list: 0x00000000005ab150 ***
内存问题始终是c++程序员需要去面对的问题,这也是c++语言的门槛较高的原因之一。通常我们会犯的内存问题大概有以下几种:
1.内存重复释放,出现double free时,通常是由于这种情况所致。
2.内存泄露,分配的内存忘了释放。
3.内存越界使用,使用了不该使用的内存。
4.使用了无效指针。
5.空指针,对一个空指针进行操作。
不断调试发现每次发生问题的地方还不太一样。
但大多(不是全部)似乎和一个类(姑且称作类A)有关,理由是:
1) 我发现这个类A没有正常delete,于是我加了一句delete:
但,居然在delete类A的时候发生该异常。
2) 于是我把new A的语句提前,放在另一个类B构造函数里,然后仅在类B的析构函数里delete。
但,发生该异常的错误居然提前到类B构造函数之后的另一个类C的new的地方。
3)其他莫名其妙出错的地方都发生在new类A的之后。
因为这个类A是属于一个动态库里的,我第一时间怀疑是不是头文件和库文件不一致导致的。因为这个类A在其他工程里运行良好。
于是从其他工程里复制其头文件,覆盖本工程。
重新编译工程,运行,再也不出错了。
因为发生这个错误情况,网上大多把错误原因归咎于内存泄露,所以我觉得有必要记录一下我这个解决办法。