驱动开发:内存管理,防止内存泄漏

动态申请和释放

  1. ExFree**后,需要对指针置NULL,这样再释放之前可以判断是否为NULL来防止重复释放,否则重复释放会蓝屏

  2. 若调用了RtlAnsiStringToUnicodeString,需要使用RtlFreeUnicodeString释放

  3. 若为一段指针动态申请了一段内存,不要再直接让它指向常量,而应该使用RtlStringCbCopy类函数进行复制。否则后期对常量指针释放会导致蓝屏。

  4. 特别注意在申请和释放之间,若存在break或return需要特别注意是不是会跳过释放语句。若会跳过,则应增加释放语句。如

do{
   
UNICODE_STRING uni_string;
ExAllocatePoolWithTag(&uni_string,1024,TAG);/*申请内存*/
if(**)
{
   
//若进入这个语句,则会跳出循环而未内存释放,因此应在这里加入
//ExFreePoolWithTag(&uni_string,TAG);
break
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值