C开发中,内存泄漏与频繁的空指针读写造成的程序异常退出是相当头痛的问题,习惯了图形化开发或有自动内存垃圾收集功能开发语言的环境,面对C的这些指针灵活性同时带来的困扰可有如下处理原则和应对,如有不当,敬请补充指教:) 不要为了代码的“美观”而不必要地使用动态内存分配: 字符操作永远要当心: 函数调用和传值: 如果是 在*nix平台下,熟练使用dump core文件加gdb跟踪,可以快速定位到内存出错程序异常退出点,直接gdb>core-file core.xxxx.dumpfile之后,bt列出所有堆栈1,2,3…然后f 1[2,3,…]就可以方便debug错误点上下文(当然,gcc编译时需携带debug信息); 使用下列的memleak工具,使 用非常简单(适用于*nix或windows下非托管c,c++等所有直接malloc,free进行内存管理的程序中^_^),即,将程序中所有 malloc,relloc和free等用该工具库中的代替,初始化时dbg_init(100),在程序运行一段时间 后,dbg_heap_dump("")即可列出所有超过180s动态分配后还未释放的内存(包括在哪个源文件哪一行等信息),由你自己判断是不是泄漏未 释放的内存,而dbg_history_dump("");则可列出所有内存动态分配释放的历史记录,方便你跟踪某些动态内存分配后到释放的时间长度,方 便管理内存,设计和组织程序流程; 内存泄漏检测工具:Memleak.c (jacky) |