Skip to content

DEALLOCATE

来源: https://www.freebasic.net/wiki/wikka.php?wakka=KeyPgDeallocate 最后更新: 2021-06-16

释放先前分配的内存。

语法

declare sub Deallocate cdecl ( byval pointer as any ptr )

用法:

Deallocate( pointer )

参数

  • pointer — 先前分配的缓冲区地址。

说明

释放先前由 Allocate 分配的内存。调用后,pointer 将失效——任何后续使用(解引用或再次调用 Deallocate)都会导致未定义行为

重要: 当内存中包含字符串描述符时,必须在调用 Deallocate _之前_先销毁字符串(设为 ""),否则字符串数据无法被释放,将导致内存泄漏。

对空指针调用 Deallocate 不执行任何操作。

示例

示例 1:基本用法

vb
Sub DeallocateExample1()
    Dim As Integer Ptr integerPtr = Allocate( Len( Integer ) )

    *integerPtr = 420
    Print *integerPtr

    Deallocate( integerPtr )
    integerPtr = 0   ' Zero the pointer after deallocation
End Sub

DeallocateExample1()
End 0

示例 2:按引用传递指针(正确模式)

vb
Function createInteger() As Integer Ptr
    Return Allocate( Len( Integer ) )
End Function

Sub destroyInteger( ByRef someIntegerPtr As Integer Ptr )
    Deallocate( someIntegerPtr )
    someIntegerPtr = 0   ' Null the original pointer
End Sub

Sub DeallocateExample3()
    Dim As Integer Ptr integerPtr = createInteger()
    *integerPtr = 420
    Print *integerPtr
    destroyInteger( integerPtr )
    Assert( integerPtr = 0 )
End Sub

DeallocateExample3()
End 0

方言差异

  • -lang qb 方言中不可用,除非使用别名 __Deallocate 引用。

与 QB 的差异

  • FreeBASIC 新增。

另请参阅

基于 FreeBASIC 官方文档翻译 如有侵权请联系我们删除
FreeBASIC 是开源项目,与微软公司无隶属关系