vb在调用API的一个Bug可能导致内存泄露
其实这个问题我很早很早以前就发现了,只是一直没留意,也不在意。今天无意中又用VB写了一个程序全部使用NTDLL导出函数编写,又出现了这样的情况,这样就由不得我不注意了,经过我的反复测试以及反汇编验证,证实了vb6_sp6在调用某些API(测试的应该有很多API存在这样的问题)存在内存泄露问题或者是函数调用失败。请大家先看我写的简单两段代码。
代码一:
Option Explicit
Private Const MEM_RELEASE = &H8000
Private Const MEM_COMMIT = &H1000
Private Const PAGE_EXECUTE_READWRITE = &H40
Private Declare Function VirtualAlloc Lib "kernel32" (lpAddress As Any, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFree Lib "kernel32" (lpAddress As Any, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Private Sub Code1()
Dim Base As Long
Base = VirtualAlloc(ByVal 0&, 100, MEM_COMMIT, PAGE_EXECUTE_READWRITE)
If Base Then
MsgBox Hex(Base)
MsgBox VirtualFree(ByVal Base, 0, MEM_RELEASE)
MsgBox Hex(GetLastError)
End If
End Sub
这段代码是申请一段内存,然后马上释放它,代码没什么难以理解的非常简单。大家仔细看代码上好像也不存在有什么问题,那么问题在什么地方呢?
我一句一句来解析首先“Base = VirtualAlloc(ByVal 0&,
相关问答:
为什么工具栏按扭的宽度改变不了,在属性里改了又变成原来的数值了
大胡子真厉害,回答基本都是爆料级的
大胡子升级真快啊,这才几天就5条短裤外加月排名第一了
想想我这5个短裤混了差不多8年才得到的。
回复 ......
帮我改改 我总觉得有问题
Type ID
number As Single
score As Integer
name As String * 6
End Type
Dim personl As ID, i%
Private Sub Command1_Click()
i = 0
&nbs ......
Private Sub btnPrint_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnPrint.Click
MouseWait()
Dim ClearTempTabelSQL As String
'If Not ......
我想把word另存为xml之后,用vb读取这个xml的内容,请问如何实现?
dim f as integer
dim b() as byte
dim s as string
dim L as long
f=freefile()
open "abc.xml" for binary access read as #f
......
把已有数据(数据大于20行)的RS(recordset)的第10行数据与第11行数据做加法后,删除第11行的数据,然后把后面的数据向前移。
RS的话修改数据是会更新数据库,现在的问题是RS里的已有数据是用SQL语句分类统计出来的 ......