都是弱智错误。
头文件:
class Subsystem;
class Application
{
std::vector<Subsystem> mSubsystems;
}
cpp文件:
#include "Application"
Application::~Application()
{
for (size_t i=mSubsystems.size()-1; i>=0; --i)
{
delete mSubsystems[i];
}
}
在这里有两个错误:
1.Subsystem在头文件里面作了向前声明,但是在cpp文件里面没有包含其头文件,因此,其析构函数是不会被调用的。
2.数组的反向遍历,使用size_t也就是unsigned int,如果当i为0的时候,--i就为负数,为负数这是有符号整形的事情,而无符号整型却会为这个值取反,变成一个很大的正数,这个时候就完蛋了,越界。
应该这样:
int i = static_cast<int> (mSubsystems.size()-1);
for (; i>=0; --i)
{
Subsystem* subsystem = mSubsystems[i];
if (subsystem!=0) { delete subsystem; subsystem = 0;}
}
最近脑子真是糊涂到底了。写了一大堆代码,居然有这么弱智低级的错误,我先发现子系统没有析构,等找出问题所在了,然后就是删除子系统的顺序错了,开始用的是正序,显然会出错。再后面反序用无符号整型,数组越界。真是晕死掉了!!
真不知道最近在想什么去了。
代码是越累越多,要还这么晕乎下去,那就意味着糊涂代码也越来越多,那可就是一堆垃圾代码呀,垃圾代码有个P用呀!
嗨嗨。。。。