阅读:1117回复:7
ExFreePool的疑问。
VOID ExFreePool( PVOID p) 是ExFreePool原型,无法根据返回值来看是否释放内存成功。
我分配的内存是自己维护的一个链表,我发现当我调用ExFreePool释放链表中指针所指向的内存(由ExAllocatePool分配的)时,指针所指的字符串在SOFTICE WATCH窗口中显示没有被删掉。这正常吗? |
|
|
沙发#
发布于:2002-06-12 17:59
我认为释放内存的意义是你的程序不可以访问这块内存了,不是内存被清空的意思吧…… :(
|
|
板凳#
发布于:2002-06-12 18:10
我没有反汇编调试进去,然而在C++中的new 和 delete是会清空内存的,所以我担心内存没有被真正地释放。
|
|
|
地板#
发布于:2002-06-12 18:28
不同的系统有不同的内存管理算法吧.如果我们来实现ExFreePool,最简单就是将控制区数据修改,对用户数据区部分不做任何处理.
不同的类new和delete不一样,而且你还可以重载.我想不能拿他们做标准. 所以我想fkddn的想法是对的. 希望有帮助. |
|
地下室#
发布于:2002-06-13 09:51
呵呵!释放内存不一定就会把那部分内存的内容填0,在系统里面应该有一个链表之类的东西来维护内存的使用情况的,应该有一个标记标明该块内存是否正在被使用
|
|
5楼#
发布于:2002-06-13 10:10
之所以有这样的疑问是因为,在释放有些内存的时候,我却发现其相应的内容被清掉了,但不是0.同样是使用ExFreePool
|
|
|
6楼#
发布于:2002-06-13 10:21
赞同fkddn的看法。
|
|
7楼#
发布于:2002-06-13 11:50
之所以有这样的疑问是因为,在释放有些内存的时候,我却发现其相应的内容被清掉了,但不是0.同样是使用ExFreePool 个人感觉是: 一般是的第一个字或字节改变为无效的指针(地址空间)。。。。。。。。。。。。 其内容不一定改变。。。。 :) 另: 偶对此类如:“VOID ExFreePool( PVOID p) 是ExFreePool原型,无法根据返回值来看是否释放内存成功。 ” 等无返回值的,就认为其成功,不成功则是自己指针的问题。。。。。(不得已也。:() ”应该有一个标记标明该块内存是否正在被使用“---这也不是个好办法。。。。 这些都是我个人的坏习惯。。。。。。。。。 :P [编辑 - 6/13/02 by magicw] |
|
|