记录两个错误

都是弱智错误。
头文件:

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用呀!
嗨嗨。。。。

时间: 2024-11-02 07:05:32

记录两个错误的相关文章

用excel高级筛选中选择不重复记录两种方式的差异图解

  excel中高级筛选中选择不重复记录两种方式的差异 高级筛选分为两种方式 在原有区域显示筛选结果 将筛选结果复制到其他位置 在原有区域显示筛选结果被筛选掉的行只是被隐藏了 第二种方式 将筛选结果复制到其他位置 被筛选掉的行已经是被删除的 选中数据区域 观察这个数据区域中有两个行是有重复的 并且分别出现过两次 而且是挨着的 鼠标点按a1单元格 拖动鼠标到e25单元格 松开鼠标 点击菜单栏 数据 筛选 高级筛选命令 在弹出的高级筛选对话框的方式 选择为将筛选结果复制到其他位置 点击复制位置后面的

量产U盘最容易犯的两个错误

  有很多朋友在用U盘启动时喜欢把U盘量产成CD-ROM格式,但在量产的过程中总会出现这样或那样的问题,现在就说说最容易犯的两个错误. 一.U盘芯片型号搞错. 二.计算机USB插口电流.电压不足.第一个原因大家好理解,第二个原因大家不明白,我们仔细来看看.开始时,在14台计算机上试验的过程中,我们发现一个奇怪的现象,同样的U盘和制作软件(量产工具软件),有的计算机上制作可以成功.有的不能成功,甚至于换用它的芯片专用量产软件后,连正确的U盘容量也不能识别(比如把4GB认成2GB,或把4GB认成8G

c-关于链表删除节点及打印的两个错误

问题描述 关于链表删除节点及打印的两个错误 //遍历一般线性表,删除位于键值为负节点之后的所有节点 #include #include #include #include struct example { int input; struct example* next; }; typedef struct example EXAMPLE; void creat (EXAMPLE* head); void remove (EXAMPLE* head); void print (EXAMPLE* h

麻烦帮忙修改下这个管理系统的错误!一直有两个错误,急死了!

问题描述 麻烦帮忙修改下这个管理系统的错误!一直有两个错误,急死了!谢谢各位大大了由于无法上传附件,附上管理系统链接http://www.shubulo.com/thread-40674-1-1.html 解决方案 解决方案二:一直提示frmSite为未定义类型....解决方案三:都没有这个frmsite的窗体,你再定义一百次也没有用~

汇编语言-请问一个汇编问题,感觉有两个错误啊

问题描述 请问一个汇编问题,感觉有两个错误啊 ADC VAR1,[BP][DI] 这个代码为什么是错误的?答案说是不能同时都在存储器中 但是[BP]不是隐含着使用SS段寄存器吗?我怎么觉得[BP][DI]这个也错了呢?谢谢各位了 求解答 解决方案 http://www.cnblogs.com/mushroom_lb/archive/2009/07/06/1517648.html 参考 解决方案二: 操作数不能都是内存!

王利芬承认犯过两大错误:教育用户铺摊子

DoNews3月26日消息(记者 赵楠)3月26日,原央视主持人.优米网CEO王利芬在"2010最受尊敬的创业天使"颁奖典礼中发表了演讲.王利芬认为,创业者最容易犯"教育用户"."铺摊子"两个错误. 3月26日,王利芬在<创业家>.创业基金会主办的"2010最受尊敬的创业天使"颁奖典礼中发表了演讲.在演讲中,王利芬总结了自己在创办优米网过程中曾犯的印象最深刻的两个错误:教育用户.铺摊子. 错误一:教育用户 王利芬认

《星际争霸2》首个补丁放出修正两个错误

8月2日消息,暴雪于昨日首次发布了<星际争霸2>的首个补丁1.0.1. 这个补丁修正了游戏的两个错误: 战役模式存档得到优化: 修正了某些7.1系统下声音无法播放的问题: 另外,ATI也发布了解决显卡过热问题的催化剂BETA驱动.(编辑 张澄)

逻辑卷管理的两个错误记录

在使用lvm时遇到几个问题记录一下,如你也刚好碰到,可以减少点排错时间. 1. 创建lv时报错,可能是以前这个vg的数据有问题,不过它这里有个提示. Cannot change VG vgdata01 while PVs are missing. Consider vgreduce --removemissing. 确实,在列出PV时,报了一个unknown device. pvs unknown device vgdata01 lvm2 a-m 5.82t 0 所以在这个vg上创建100%VG

Log4Net日志记录两种方式

本文转载:http://www.cnblogs.com/wolf-sun/p/3347373.html#3009010 简介      log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具.     log4net是Apache软件基金会Apache Logging Services工程的一部分.Apache日志服务工程致力于为程序调试和审计提供跨语言的日志服务.(f:百度百科) 原理