为现有的预留内存块重新赋值存储空间
语法
用法
result  = Reallocate( pointer , count  )
参数
pointer 
要重新赋值的赋值内存的地址。
count 
总共要重新赋值的字节数。
 返回值
重赋值内存的地址。如果重新赋值不成功,则返回null(0)指针,并且pointer 指向的原始内存保持不变。
说明
尝试重新赋值或调整大小先前使用
Allocate或
CAllocate赋值的内存。缓冲区的内容被保留,尽管如果
count 小于内存块的原始大小,缓冲区将被截断。如果大小增加,则添加的内存范围不会被初始化为任何内容。
当使用
Reallocate时,必须保存
result 指针以防止潜在的内存泄漏,因为原始
pointer 在重新赋值后可能不再有效。应该检查新指针的值 - 如果是
0,则重新赋值失败 - 原始
pointer 保持有效,并且赋值给它的内存量没有改变。
当不再需要时,必须使用
Deallocate释放重新赋值的内存。
如果
pointer 为null(
0),则
ReAllocate的行为与
Allocate的行为相同。如果
pointer 有效且
count 为空(0),则
ReAllocate的行为与
Deallocate类似,并返回null(0)指针。
如果以前通过调用
Deallocate或
ReAllocate释放了内存,则行为是未定义的。
当为
String描述符(或
Udt包含一个)描述符手动赋值内存时,如果
count 大于内存块的原始大小,则新的额外内存范围必须在第一个字符串之前明确清除为零使用(例如,使用
Clear)。否则访问该字符串将导致未定义的结果(尝试在内存中的随机位置进行写入或读取,或尝试释放随机指针)。
此函数不是FreeBASIC运行时库的一部分,它是C运行时库
realloc 的别名,因此不能保证在所有平台中都是线程安全的。
注意事项:在对象函数内部重新赋值一个指针,当该指针包含该函数的父对象时,它是未定义的,并且可能导致可怕的崩溃。
例子
Dim a As Integer Ptr, b As Integer Ptr, i As Integer
a = Allocate( 5 * SizeOf(Integer) )   '赋值内存5个整数
If a = 0 Then Print "错误赋值a": End
For i = 0 To 4
  a[i] = (i + 1) * 2   '将整数赋值给缓冲区
Next i
b = Reallocate( a, 10 * SizeOf(Integer) )   '重新赋值内存5个额外的整数
If b <> 0 Then
    a = b   '丢弃旧的指针并使用新的指针
    For i = 5 To 9
      a[i] = (i + 1) * 2   '为缓冲区赋值更多的整数
    Next i
    For i = 0 To 9   '打印整数
      Print i, a[i]
    Next i
    Print
Else ''重新赋值失败,内存不变
    Print "重新赋值错误"
    For i = 0 To 4   '打印整数
      Print i, a[i]
    Next i
    Print
End If
Deallocate a   '清理
 方言差异
与QB差别
参考