牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

记录两个错误

都是弱智错误。
头文件:
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用呀!
嗨嗨。。。。

posted on 2008-07-01 01:14 杨粼波 阅读(258) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理