析构函数中释放内存时crash – free(): invalid size / free(): invalid pointer / double free or corruption(out)
原因: 1.通常是有指针越界造成的,仔细检查代码有没有越界的行为。 2.指针在程序运行中位置发了变化,例如指针a,执行了a++操作。
最近在处理一个 App crash的问题时,异常诡异,仅仅在release版本下可以复现(但不是必现),debug版本不能复现。好在用QtCreator通过debug跑release版本的代码时可以截取到crash时的函数调用栈。函数调用栈显示在一个析构函数中free某一个地址的时候出的问题。 这样就大大缩小了搜索的范围,问题就定位在第7行的函数中析构第6行的类对象的时候。所以有两个出发点:
Check第7行的函数实现,发现函数中一共有两个地方定义了该类的对象(均为栈对象),既然不是用new分配的内存,那么只有一种可能,就是在代码块结束或者整个函数返回时依次释放栈对象的时候析构的。Check第6行析构函数,发现有很多释放结构体指针(数组)的代码,release模式的代码无法加
析构函数中释放内存时crash – free(): invalid size / free(): invalid pointer / double free or corruption(out)最先出现在Python成神之路。
共有 0 条评论