1 memwatch是什么?
memwatch是C语言的内存检测器。除了检测内存的功能外,它同样可以做其它的一些事情,而我们主要还是在于讲述它的基本功能。如果你真的想要知道所有相关的具体细节,可详细查看头文件memwatch.h以及源代码。那里面有具体且详细的注释说明。它使用C于处理器的功能,memwatch使用它自己定义的功能函数取代所有在你的程序中用ANSI C定义的内存分配函数,memwatch的内存分配函数包含了了所有的分配记录信息。2 memwatch功能a.它主要有基本的内存管理函数mwMalloc()mwFree()mwCalloc()mwRealloc()b.MemWatch能够检测的功能包括双重释放(double-free)、错误释放(erroneous free)、内存泄漏(unfreed memory)、溢出(Overflow)、下溢(Underflow)等而目前我们只针对double-free进行了验证;对于unfreed功能,需要在主程序结束前添加CHECK()函数进行检查,这一点嵌入式系统并不特别适用,因此,在强行关闭程序时有可能会出现大量的unfreed信息,请忽略。使用MemWatch功能需要在待检测源文件中引用memwatch.h,若没有添加有可能出现野指针(wild-free)信息;如果申请内存时使用了malloc而释放内存时使用了mwfree接口,有可能会出现错误释放(wild-free)信息,遇到wild-free现象时请先排除以上两场景。3 编译当编译时, 相让memwatch起作用, 编译是加上-DMEMWATCH4 memwatch.log内容在正常操作的情况下,memwatch会创建一个名叫memwatch.log的文件。但有的时候,memwatch.log文件并不能被创建。此时,memwatch会尝试创建命名类似memwatNN.log的文件,其中NN是01到99之间的数字。如果还是失败,则没有log文件。a、检测启动时间:如:Started at Thu Nov 1 14:56:31 2012Started at Thu Nov 1 14:56:31 2012b、状态搜集器的信息及宏定义信息,可忽略。如:__STDC__ 64-bit mwDWORD==(unsigned longmwROUNDALLOC==8 sizeof(mwData)==32 mwDataSize==32c、MemWatch捕获的错误信息如:double-free: <1385> menuChannelSet.c(529), 0x11a4130 was freed from mwTest.c(781)