gpt4 book ai didi

arrays - 数组中的删除与重新调暗

转载 作者:行者123 更新时间:2023-12-02 23:39:08 25 4
gpt4 key购买 nike

背景:

我刚刚遇到this question让我了解了erase数组中的语句。

我一直使用以下方法来重置它们:

Sub TestWithRedimOnly()
Dim ExampleArray() As String
ReDim Preserve ExampleArray(1)
ExampleArray(1) = "yo"
MsgBox ExampleArray(1)
ReDim ExampleArray(0) As String
MsgBox ExampleArray(1) 'this confirms is reset!
End Sub

如果我用删除来做到这一点

Sub TestWithEraseAndRedim()
Dim ExampleArray() As String
ReDim Preserve ExampleArray(1)
ExampleArray(1) = "yo"
MsgBox ExampleArray(1)
Erase ExampleArray
MsgBox ExampleArray(1) 'this confirms is reset!
ReDim ExampleArray(0) As String
MsgBox ExampleArray(1) 'this confirms is reset!
End Sub

最后,两者都重置了变量。

问题:真的值得使用删除语句吗?它是否比 Redim.. As.. 更好地防止内存泄漏?您是否记得有任何不这样做的情况?

最佳答案

既然您询问了 Redim 与 Erase 特别是在内存方面的后果......唯一的实际区别是动态数组。

如果删除非动态数组,它会将其中的值设置为 0、零长度字符串或变体的“空”。例如:暗淡数组(10)

如果删除动态数组,它会完全释放内存。例如:Dim Array()

这两个选项都不会导致内存泄漏。如果您循环遍历代码的数组并重新调整/删除数组部分,两者都会导致内存释放,而不会不断扩展所使用的内存。如果您在代码循环中遇到内存泄漏,那么这可能是一个更好的问题。

来自删除帮助:

Dim NumArray(10) As Integer ' Integer array.
Erase NumArray ' Each element set to 0.

Dim StrVarArray(10) As String ' Variable-string array.
Erase StrVarArray ' Each element set to zero-length string ("").

Dim StrFixArray(10) As String * 10 ' Fixed-string array.
Erase StrFixArray ' Each element set to 0.

Dim VarArray(10) As Variant ' Variant array.
Erase VarArray ' Each element set to Empty.

Dim DynamicArray() As Integer ' Dynamic array.
ReDim DynamicArray(10) ' Allocate storage space.
Erase DynamicArray ' Free memory used by array.

关于arrays - 数组中的删除与重新调暗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38128435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com