从空闲存储器赋值一块内存
语法
用法
result  = Allocate( count  )
参数
count 
要赋值的内存块的大小(以字节为单位)。
 返回值
如果成功,则返回赋值内存的开始地址。否则,如果请求的块大小无法赋值,或者如果count  < 0,则返回空指针(0)。
说明
尝试从空闲存储器(堆)中赋值或保留
count 个字节数。新赋值的内存未初始化。
由于新赋值的内存的初始值未指定,
Allocate不能与包含字符串的
String或
Udt直接一起使用,因为字符串描述符不会被清除(包含随机数据),可能会导致损坏的字符串或更多(尝试写入内存中的随机位置或尝试取消赋值随机指针)。在
UDT的情况下,在
Allocate之后,最好使用
CAllocate(清除内存)或
New(调用构造函数),以明确地清除描述符(设置为0)在第一个字符串使用之前。
返回的指针是
任何PTR,并指向已赋值内存的开始。这个指针保证是唯一的,即使
count 为零。
在不再需要时,赋值的内存必须由
Deallocate解除赋值或返回到空闲存储器。
例子
''该程序使用ALLOCATE(...)函数来创建一个15个整数的缓冲区
''然后填写前15个斐波纳契序列号,然后输出到
''屏幕。注意在程序结束时对DEALLOCATE(...)的调用。
    Const integerCount As Integer = 15
    ''尝试为多个整数赋值内存。
    ''
    Dim buffer As Integer Ptr
    buffer = Allocate(integerCount * SizeOf(Integer))
    If (0 = buffer) Then
        Print "错误:无法赋值内存,退出。"
        End -1
    End If
    ''用斐波那契序列填充和填充记忆。
    ''
    buffer[0] = 0
    buffer[1] = 1
    For i As Integer = 2 To integerCount - 1
        buffer[i] = buffer[i - 1] + buffer[i - 2]
    Next
    ''显示顺序。
    ''
    For i As Integer = 0 To integerCount - 1
        Print buffer[i] ;
    Next
    Deallocate(buffer)
    End 0
输出为:
| 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 | 
 
释放赋值的内存是非常重要的,因为它不再被使用了。未被释放的未使用的内存只是浪费内存,如果该内存的地址以某种方式被覆盖或被遗忘,则该内存永远不会被释放。这种情况被称为内存泄漏,应该不惜一切代价避免。注意,当应用程序终止时,泄漏的内存总是完全释放,无论是通过“普通”退出还是崩溃,所以只要应用程序运行,泄漏“持续”,但是,释放应用程序中赋值的内存是一个好习惯。以下示例演示了具有内存泄漏的函数,其中赋值的内存的地址丢失,并且不再被释放。如果频繁调用这样的功能,浪费的内存总量可以快速增加。
''赋值使用的错误示例,导致内存泄漏
Sub BadAllocateExample()
    Dim p As Byte Ptr
    p = Allocate(420)   ''将指针指向新内存
    p = Allocate(420)   ''重新赋值相同的指针到不同的内存,
                        ''旧地址丢失,内存泄漏
    Deallocate(p)
End Sub
    ''主要
    BadAllocateExample() ''创建内存泄漏
    Print "内存泄漏!"
    BadAllocateExample() ''...和另一个
    Print "内存泄漏!"
    End
 平台差异
方言差异
与QB差别
参考