博文

VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏(2010-05-08 16:06:00)

摘要:VC++ 6.0 中如何使用 CRT 调试功能来检测内存泄漏 作者:JerryZ   最近看了周星星 Blog 中的一篇文章:“VC++6.0 中内存泄漏检测”,受益匪浅,便运行其例子代码想看看 Output 窗口中的输出结果,可惜怎么弄其输出都不是预期的东西,郁闷了半天,便到水坛里找到周星星,请求他指点一、二,然而未果。没有办法,最后我一头栽进 MSDN 库狂搜了一把,功夫不负有心人,我搜出很多有关这方面的资料,没过多久我便基本上就找到了答案......   首先,检测内存泄漏的基本工具是调试器和 CRT 调试堆函数。为了使用调试堆函数,必须在要检测内存泄漏和调试的程序中添加下面的语句: #define _CRTDBG_MAP_ALLOC #include #include #include "debug_new.h"   MSDN 如是说:“必须保证上面声明的顺序,如果改变了顺序,可能不能正常工作。”至于这是为什么,我们不得而知。MS 的老大们经常这样故弄玄虚。   针对非 MFC 程序,再加上周星星的头文件:debug_new.h,当然如果不加这一句,也能检测出内存泄漏,但是你无法确定在哪个源程序文件中发生泄漏。 Output 输出只告诉你在 crtsdb.h 中的某个地方有内存泄漏。我测试时 REG_DEBUG_NEW 没有起作用。加不加这个宏都可以检测出发生内存分配泄漏的文件。   其次,一旦添加了上面的声明,你就可以通过在程序中加入下面的代码来报告内存泄漏信息了: _CrtDumpMemoryLeaks();   这就这么简单。我在周星星的例子代码中加入这些机关后,在 VC++ 调试会话(按 F5 调试运行) Output 窗口的 Debug 页便看到了预期的内存泄漏 dump。该 dump 形式如下: Detected memory leaks! Dumping objects -> c:\Program Files\...\include\crtdbg.h(552) : {45} normal block at 0x00441BA0, 2 bytes long. Data: 41 42 c:\Program Files\...\include\crt......

阅读全文(1383) | 评论:0

[转]VC使用CRT调试功能来检测内存泄漏(2010-05-08 14:35:00)

摘要: 来源:http://pcedu.pconline.com.cn/empolder/gj/vc/0506/648575_1.html C/C++ 编程语言的最强大功能之一便是其动态分配和释放内存,但是中国有句古话:“最大的长处也可能成为最大的弱点”,那么 C/C++ 应用程序正好印证了这句话。在 C/C++ 应用程序开发过程中,动态分配的内存处理不当是最常见的问题。其中,最难捉摸也最难检测的错误之一就是内存泄漏,即未能正确释放以前分配的内存的错误。偶尔发生的少量内存泄漏可能不会引起我们的注意,但泄漏大量内存的程序或泄漏日益增多的程序可能会表现出各种 各样的征兆:从性能不良(并且逐渐降低)到内存完全耗尽。更糟的是,泄漏的程序可能会用掉太多内存,导致另外一个程序垮掉,而使用户无从查找问题的真正根源。此外,即使无害的内存泄漏也可能殃及池鱼。   幸运的是,Visual Studio 调试器和 C 运行时 (CRT) 库为我们提供了检测和识别内存泄漏的有效方法。下面请和我一起分享收获——如何使用 CRT 调试功能来检测内存泄漏? 一、如何启用内存泄漏检测机制   VC++ IDE 的默认状态是没有启用内存泄漏检测机制的,也就是说即使某段代码有内存泄漏,调试会话的 Output 窗口的 Debug 页不会输出有关内存泄漏信息。你必须设定两个最基本的机关来启用内存泄漏检测机制。   一是使用调试堆函数: #define _CRTDBG_MAP_ALLOC #include #include   注意:#include 语句的顺序。如果更改此顺序,所使用的函数可能无法正确工作。   通过包含 crtdbg.h 头文件,可以将 malloc 和 free 函数映射到其“调试”版本 _malloc_dbg 和 _free_dbg,这些函数会跟踪内存分配和释放。此映射只在调试(Debug)版本(也就是要定义 _DEBUG)中有效。发行版本(Release)使用普通的 malloc 和 free 函数。#define 语句将 CRT 堆函数的基础版本映射到对应的“调试”版本。该语句不是必须的,但如果没有该语句,那么有关内存泄漏的信息会不全。   二是在需要检测内存泄漏的地方添加下面这条语句来输出内存泄漏信息:......

阅读全文(1219) | 评论:0

IE里的探索(2010-05-08 13:55:00)

摘要:IE里的探索 青苹果工作室编译    Microsoft公司的 Internet Explorer已经成为我们机器中必备的工具,只要一打开计算机,只要一上网,怎么会不双击那熟悉的E图标?但是我们对它的了解也许只停留在冰山一角的程度,我们希望添加、定制特殊的功能,以实现更加实用、更加强大的功能。本文就将全面介绍关于IE的高级定制功能,让我们更加充分地发挥其作用!   本文包括如下各节: * 浏览器概览 * 向标准上下文相关菜单里添加条目 * 添加浏览器栏 * 添加工具条按钮 * 创建具有良好行为的自定义元素 * 定制浏览器好助手-BHO(上) * 定制浏览器好助手-BHO(中) * 定制浏览器好助手-BHO(下) 链接:http://tech.china.com/zh_cn/netschool/softwares/ie/628/20010306/01.html......

阅读全文(1429) | 评论:0

TCHAR* 转 CString(2010-05-07 18:00:00)

摘要:简单随笔。。。。。 TCHAR* pTmp = L"dfdskfjlsdjfjdlfjlsdkjfsdjf"; CString str(pTmp);......

阅读全文(3302) | 评论:0

vs2005 的删除类和删除函数的方法(2010-05-07 17:11:00)

摘要:随笔。。。。。 1.删除类: 在解决方案视图,选中类所对应的文件,按键盘delelte,然后保存工程编译RebuildAll。就会把该类删掉。 2.删除函数: 在.h和.cpp文件文件中注释掉即可,重新开一次VS2005后类视图中就不会显示出一删除的函数名称了。......

阅读全文(3482) | 评论:1

TCHAR 转换为char(2010-05-07 16:31:00)

摘要:void Wide2Bytes(char* pBytes,TCHAR* pWide) {          int nLen = WideCharToMultiByte(CP_ACP,0,pWide,-1,NULL,0,NULL,NULL);          // get need convert length           int i = (int)wcslen(pWide)*sizeof(TCHAR);           // get need new memory size            pBytes = new char[i+1];            if (!pBytes) // if fail then new again            {                     pBytes = new char[i+1];            }            if(!pBytes) { return; }     ......

阅读全文(6877) | 评论:0

乱七八糟的链接(2010-04-30 11:52:00)

摘要: forum.ragezone.com:这个网站有各种网游的介绍,主要是私服的架设,经常会有私服原代码下载。 plib.sf.net:基于ogl的3D库 新闻组服务器:news.cn99.com,msnews.microsoft.com,news.digitalmars.com BUG跟踪系统:bugzilla,clearquest 一个C++的好多有用的库,包括线程,套接字(其他的我记不得了):cplusplus.sf.net UDP库(实现可靠UDP传输和一些常用的UDP所用的功能,如文件传输等等):enet.cubik.org,raknet,opentnl 数据库读写:otl.sf.net,dtl.sf.net,libodbc++ ......

阅读全文(2147) | 评论:0

C++ study links(2010-04-30 11:51:00)

摘要: http://blog.vckbase.com/bastet/archive/2005/03/27/4080.html......

阅读全文(1431) | 评论:0

tcp长连接和短连接(2010-04-30 10:22:00)

摘要:TCP/IP通信程序设计的丰富多样性 (转) 刚接触TCP/IP通信设计的人根据范例可以很快编出一个通信程 序,据此一些人可能会认为TCP/IP编程很简单。其实不然, TCP/IP编程具有较为丰富的内容。其编程的丰富性主要体现在 通信方式和报文格式的多样性上。 一。通信方式 主要有以下三大类: (一)SERVER/CLIENT方式 1.一个Client方连接一个Server方,或称点对点(peer to peer): 2.多个Client方连接一个Server方,这也是通常的并发服务器方式。 3.一个Client方连接多个Server方,这种方式很少见,主要 用于一个客户向多个服务器发送请求情况。 (二)连接方式 1.长连接 Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。这种方式下由于通讯连接一直 存在,可以用下面命令查看连接是否建立: netstat –f inet|grep 端口号(如5678)。 此种方式常用于点对点通讯。 2.短连接 Client方与Server每进行一次报文收发交易时才进行通讯连 接,交易完毕后立即断开连接。此种方式常用于一点对多点 通讯,比如多个Client连接一个Server. (三)发送接收方式 1.异步 报文发送和接收是分开的,相互独立的,互不影响。这种方 式又分两种情况: (1)异步双工:接收和发送在同一个程序中,有两个不同的 子进程分别负责发送和接收 (2)异步单工:接收和发送是用两个不同的程序来完成。 2.同步 报文发送和接收是同步进行,既报文发送后等待接收返回报文。 同步方式一般需要考虑超时问题,即报文发上去后不能无限等 待,需要设定超时时间,超过该时间发送方不再等待读返回报 文,直接通知超时返回。 实际通信方式是这三类通信方式的组合。比如一般书上提供的 TCP/IP范例程序大都是同步短连接的SERVER/CLIENT程序。有的 组合是基本不用的,比较常用的有价值的组合是以下几种: 同步短连接Server/Client 同步长连接Server/Client 异步短连接Server/Clien......

阅读全文(7015) | 评论:0

橄榄油对女人难以想象的作用(2010-04-29 16:03:00)

摘要:JMS都喜欢保养,橄榄油,作用太大了,又纯天然,对皮肤来说是极品,虽然也不便宜,但是忒有必要去用了。 小提醒:JM们选择橄榄油的时候一定要注意,一定要选择特纯冷榨的橄榄油,只有这样的橄榄油才能美容和减肥,普通级别的酸度大于1度的橄榄油是不能用于美容的。    在西方,上好的特纯橄榄油一直是有钱女人的美容专用品,3千多年来无数女人用曼妙雪白的肌肤证明,特纯橄榄油是全能的“化妆品”,无论是吃或抹均具有美容神奇作用。 唯一可以减肥的神油 特纯橄榄油的不饱和脂肪酸和天然优质维生素E联合作用,可以分解体内脂肪;维生素K 外抹可以吸收皮下多余脂肪,因此它是唯一内服外用均具有减肥作用的天然植物神油。 既可防晒又可以防冻 特纯橄榄油夏可防晒冬可防冻,夏涂于皮肤可以防止皮肤红肿刺痛,尤其可以预防皮肤癌;冬季对于皮肤发皴、手脚干裂、掉皮屑有极好防止效果。婴儿尿腌、汗腌处亦可涂抹。 象水一样被皮肤吸收 特纯橄榄油淡淡金色、纯净清澈、清爽不粘,水性的特质令它特别宜于吸收,在皮肤上点一点橄榄油,稍加摩挲就能迅速与皮肤同化,这一点是其它天然油料完全不能相比的。 全身皮肤迅速变细嫩 特纯橄榄油富含天然优质维生素E、A、B、D、K、F等,对皮肤的滋养非常温和,没有人工化学化妆品的副作用,可迅速使皮肤柔嫩而有亚光光泽。一般第一次油浴就有明显感觉。 皮肤问题可迅速改善 特纯橄榄油制剂在医学上可以治疗烫伤和烧伤,有抗炎和滋养皮肤生长的作用,可防止皮肤皴裂和瘙痒,它对消除妊娠纹、陈旧性伤痕、各种斑痘等皮肤问题均有明显 怎样自己在家做油浴 沐浴时将身体洗净擦干,以 30毫升(一小方瓶)橄榄油均匀涂遍全身,自我按摩15分钟左右,用婴儿香皂冲洗揩干身体。坚持油浴,你的皮肤会变得又细又嫩又柔又美又白。 头发:洗发后用橄榄油滋养头发,反复梳理,待一小时许,再轻轻漂洗,可使头发飘逸闪亮。 面部:橄榄油配上等蜂蜜,轻轻按摩去除面部细小皱纹,还可以与优质白糖一起调制面膜。 眼部:每日早晚橄榄油按摩眼部十分钟,可以消除黑眼圈和眼袋,还你一双明亮迷人眼睛。 眉睫:每天早晨用橄榄油仔细刷润和养护睫毛和眉毛,可以令你眉睫漆黑闪亮、眉清目秀。 唇部:以橄榄油涂唇,保持唇部湿润,双唇晶亮......

阅读全文(1571) | 评论:0