2、直接将文件通过zmodem协议传到你securecrt配置的目录,配置在Option-SessionOptions-Terminal-X/Y/Zmodem,而要从本地传到目标机器。secureCRT的rz命令传大文件会超时并中断,导致传输失败,可以加上-bey这个参数来避免:
rz –bey BIGFILENAME
类似的接收文件的命令sz也可以通过加-bey参数来完成大文件传输,形如:
sz -bey BIGFILENAME最近看了周星星 Blog 中的一篇文章:“VC 60中内存泄漏检测”,受益匪浅,便运行其例子代码想看看 Output 窗口中的输出结果,可惜怎么弄其输出都不是预期的东西,郁闷了半天,便到水坛里找到周星星,请求他指点一、二,然而未果。没有办法,最后我一头栽进 MSDN 库狂搜了一把,功夫不负有心人,我搜出很多有关这方面的资料,没过多久我便基本上就找到了答案
首先,检测内存泄漏的基本工具是调试器和 CRT 调试堆函数。为了使用调试堆函数,必须在要检测内存泄漏和调试的程序中添加下面的语句:
#define _CRTDBG_MAP_ALLOC
#include<stdlibh>
#include<crtdbgh>
#include "debug_newh"
MSDN 如是说:“必须保证上面声明的顺序,如果改变了顺序,可能不能正常工作。”至于这是为什么,我们不得而知。MS 的老大们经常这样故弄玄虚。
针对非 MFC 程序,再加上周星星的头文件:debug_newh,当然如果不加这一句,也能检测出内存泄漏,但是你无法确定在哪个源程序文件中发生泄漏。Output 输出只告诉你在 crtsdbh 中的某个地方有内存泄漏。我测试时 REG_DEBUG_NEW 没有起作用。加不加这个宏都可以检测出发生内存分配泄漏的文件。
其次,一旦添加了上面的声明,你就可以通过在程序中加入下面的代码来报告内存泄漏信息了:
_CrtDumpMemoryLeaks();
这就这么简单。我在周星星的例子代码中加入这些机关后,在 VC 调试会话(按 F5 调试运行) Output 窗口的 Debug 页便看到了预期的内存泄漏 dump。该 dump 形式如下:
Detected memory leaks!
Dumping objects ->
c:\Program Files\\include\crtdbgh(552) : {45} normal block at 0x00441BA0, 2 bytes long
Data: <AB> 41 42
c:\Program Files\\include\crtdbgh(552) : {44} normal block at 0x00441BD0, 33 bytes long
Data: < C > 00 43 00 CD CD CD CD CD CD CD CD CD CD CD CD CD
c:\Program Files\\include\crtdbgh(552) : {43} normal block at 0x00441C20, 40 bytes long
Data: < C > E8 01 43 00 16 00 00 00 00 00 00 00 00 00 00 00
Object dump complete
更具体的细节请参考本文附带的源代码文件。
下面是我看过 MSDN 资料后,针对“如何使用 CRT 调试功能来检测内存泄漏?”的问题进行了一番编译和整理,希望对大家有用。如果你的英文很棒,那就不用往下看了,建议直接去读 MSDN 库中的技术原文。
C/C 编程语言的最强大功能之一便是其动态分配和释放内存,但是中国有句古话:“最大的长处也可能成为最大的弱点”,那么 C/C 应用程序正好印证了这句话。在 C/C 应用程序开发过程中,动态分配的内存处理不当是最常见的问题。其中,最难捉摸也最难检测的错误之一就是内存泄漏,即未能正确释放以前分配的内存的错误。偶尔发生的少量内存泄漏可能不会引起我们的注意,但泄漏大量内存的程序或泄漏日益增多的程序可能会表现出各种 各样的征兆:从性能不良(并且逐渐降低)到内存完全耗尽。更糟的是,泄漏的程序可能会用掉太多内存,导致另外一个程序垮掉,而使用户无从查找问题的真正根源。此外,即使无害的内存泄漏也可能殃及池鱼。
幸运的是,Visual Studio 调试器和 C 运行时 (CRT) 库为我们提供了检测和识别内存泄漏的有效方法。下面请和我一起分享收获——如何使用 CRT 调试功能来检测内存泄漏?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)