内存泄露得与失

   作为一个木有太多经验的"猿"类,相信总会犯一些在大牛们看来简直弱智的错误!或因基础不够扎实又或者本身的大意,而我犯了第二种,so,记录下来事情的缘起以及给自己的苦楚(烦恼).
     事情的起因源于GetAdaptersInfo( _Out_ PIP_ADAPTER_INFO pAdapterInfo, _Inout_  PULONG pOutBufLen ) 函数,MSDN如此描述该函数The GetAdaptersInfo function retrieves adapter information for the local computer.(拿到本地网卡的信息),关键在于我忽略了或者是没有仔细看它的第一个参数的解释: pAdapterInfo  [out]     A pointer to a buffer that receives a linked list of  IP_ADAPTER_INFO  structures. 大概意思是指向一个缓冲链表,当初自己的理解 就是一个结构体指针,使用时便申请内存空间 让后传入该函数,而函数的本意是要传入一个存储整个列表的空间(现在是这么理解的,不知道对否 ,待验证),windows专门有这样的API来处理此种情况下的内存申请与释放( HeapAlloc,HeapFree );于是定义以下两个宏:
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, (x)) //x表示要申请的大小,GetProcessHeap()获取调用进程的默认堆句柄
#define FREE(x) HeapFree(GetProcessHeap(), 0, (x))  //x表示要释放的内存地址
如此 则能如C语言一般使用MALLOC与FREE来操作 
pAdapterInfo  [out] 参数的申请与释放,不会出现内存泄露的问题!! 微软后面的文档都推荐使用 GetAdaptersAddresses  ()替代改函数.
    在问题查找的过程中使用过自己的方法,虽然不怎么方便,当时勉强能用!对于C++内存泄露的问题 推荐一款
Visual Leak Detector 软件,使用很方便,有单独的配置文件可按照自己的需求配置.在工程中设置好相应的路径,只要包含一个头文件即可!(详细文档都在官网,留作以后了解),该软件对于追查QT的内存泄露 不太方便,官网也有说明,但是能缩小查找范围.
   另外,新版本的GTest中有很多函数模板的参数超出了5个,而在VS2012中默认是五个,故需要做相应的修改 新版本的GTest才能编译通过,具体方法:
打开 xstddef 头文件  修改 #define _VARIADIC_MAX 5 宏的值 一般修改为 #define _VARIADIC_MAX 10 便够用.
  庆幸的是有个好头儿,给我足够的时间学习!苦逼的是 继续战斗!Fighting!!!!!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值