3895|8

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

高手请进!..郁闷的问题: [复制链接]

1、为什么我用NdisAllocateMemoryWithTag申请内存后,在NdisFreeMemory释放!有时候会蓝屏

我用 NdisAllocateMemoryWithTag(&pPacketContent,TotalPacketLength,TAG);
申请后
在释放的时候用
if(pPacketContent) NdisFreeMemory(pPacketContent,TotalPacketLength,0); 释放!但是有时候会蓝屏!为什么!

BAD_POOL_CALLER (c2)
The current thread is making a bad pool request.  Typically this is at a bad IRQL level or double freeing the same allocation, etc.
Arguments:
Arg1: 00000007, Attempt to free pool which was already freed
Arg2: 00000cd4, (reserved)
Arg3: 00000000, Memory contents of the pool block
Arg4: 81374008, Address of the block of pool being deallocated
STACK_TEXT:  
f9dc7108 804f880d 00000003 f9dc7464 00000000 nt!RtlpBreakWithStatusInstruction
f9dc7154 804f93fa 00000003 81647858 81374000 nt!KiBugCheckDebugBreak+0x19
f9dc7534 804f9925 000000c2 00000007 00000cd4 nt!KeBugCheck2+0x574
f9dc7554 80544c86 000000c2 00000007 00000cd4 nt!KeBugCheckEx+0x1b
f9dc75a4 f96e660f 81374008 00000000 f9dc78a0 nt!ExFreePoolWithTag+0x2a0
f9dc75b4 f779cb6a 81374008 000005c2 00000000 NDIS!NdisFreeMemory+0x3b

出现以上问题!在if(pPacketContent) NdisFreeMemory(pPacketContent,TotalPacketLength,0)语句之前没有释放过内存:
假设释放了内存!if(pPacketContent) NdisFreeMemory(pPacketContent,TotalPacketLength,0) 这个来释放内存的话也没有错误!为什么会出现如此问题!高手帮忙看看!

最新回复

十有八九是出现了所谓的野指针了 在指针的中转过程中不知道什么地方已经释放过了,注意,这个释放操作有可能并不是你写的,好好看看代码吧。。  详情 回复 发表于 2010-4-21 22:13
点赞 关注

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
BAD_POOL_CALLER (c2) 表明缓冲区是有问题的!
Arg1: 00000007, Attempt to free pool which was already freed 说你那缓冲区早就已经释放了
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
同样的,NdisFreeMemory也必须允许在不大于DISPATCH_LEVEL中断级别上。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用楼主 axia00909 的回复:
1、为什么我用NdisAllocateMemoryWithTag申请内存后,在NdisFreeMemory释放!有时候会蓝屏

我用 NdisAllocateMemoryWithTag(&pPacketContent,TotalPacketLength,TAG);
申请后
在释放的时候用
if(pPacketContent) NdisFreeMemory(pPacketCon……


前面加了if(pPacketContent)难道不能判断吗?
 
 
 

回复

98

帖子

0

TA的资源

一粒金砂(初级)

5
 
if(pPacketContent)只是判断这个指针是否为空,如果释放后不把这个指针置空,这句话的判断会是true
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

6
 
pPacketContent 可能是个迷失指针! 如果真是这样,那他指向的位置就是错的!
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

7
 
真郁闷!:
我用dbgprint打印出了地址和长度!但是FreeMemory就是蓝屏!..还有其他办法么?
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
pPacketContent 有没有另外的指针指向它,然后进行了偏移! 例如 char *p = pPacketContent; p++; 然后你释放pPacketContent,这时pPacketContent已不再是原来的位置! 楼主还是贴代码吧!!!
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

9
 
十有八九是出现了所谓的野指针了
在指针的中转过程中不知道什么地方已经释放过了,注意,这个释放操作有可能并不是你写的,好好看看代码吧。。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表