libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1532回复:8

用驱动里的new 和delete来分配和释放内存

楼主#
更多 发布于:2003-09-15 14:32
DS写的NT式的ISA驱动里,应用层用DEVICEIOCTL传递事件对象给驱动,在相应驱动的分发例程里,驱动用到new来给事件分配非分页内存,应用循环发事件对象给驱动,所以驱动里反复用new了很多次来分配非分页内存,我理解应当在下一次事件对象到来前,用delete来释放前面分配的内存。我这样去做了没什么问题。我在驱动的卸载例程里为安全着想,又判断了以前又new分配的内存是否是空,如果不是空,就调用delete来释放。程序运行到这里的时候出现了如下的错误:
BAD_POOL_CALLER
显然是前面已经用delete释放了内存,后面又要释放,但我认为,在卸载例程里,我没有直接调用delete,而是先判断的指针是否是空,应当没什么问题的。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2003-09-15 15:12
你前面delete后,是不是没有让pointer等于NULL?
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-09-15 17:14
是的,我前面用delete 的之前,先判断指针是否是空的,如果不是空的就 执行delete来释放内存,然后就没把指针指向空。
我回去试试,看指向空,是否出错!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-09-15 17:55
刚才试了,真是老兄说的那样,没有把指针指向空的,问题解决了。我还是有个问题,是在驱动初始化的时候分配好内存,以后每次分发例程执行的时候不再分配和释放好呢,还是每次在分发例程里分配和释放??
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-09-15 22:44
如果每次大小一样,可以考虑用lookaside list
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-09-16 08:14
如果每次大小一样,可以考虑用lookaside list


谢谢大虾的知道,我想知道在DS里有没有这样的函数来实现同样的功能。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2003-09-16 15:08
只有说sorry了
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-09-16 16:14
我查到了,有一个类函数专门用来做这个和DDK里你说的那个能实现同样的功能:KHeap
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
mailme
驱动老牛
驱动老牛
  • 注册日期2001-05-21
  • 最后登录2010-02-25
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-09-18 12:19
如果每次大小一样,可以考虑用lookaside list


oh,看看
早起早睡 精神百倍
游客

返回顶部