首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数组中擦除vs ReDim

在数组中擦除vs ReDim
EN

Stack Overflow用户
提问于 2016-06-30 16:12:55
回答 2查看 17K关注 0票数 2

背景:

我只是偶然遇到了这个问题,让我了解了数组中的擦除状态。

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

代码语言:javascript
复制
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

如果我用擦除

代码语言:javascript
复制
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..更好地防止内存泄漏

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-30 16:56:57

当有疑问时,请使用语义:

  • 使用ReDim对数组进行重维
  • 使用Erase释放数组

坚持这一点将使您的代码受益于更大的一致性,并将使您的代码意图对读者/维护者/未来-您更清楚。

票数 4
EN

Stack Overflow用户

发布于 2016-06-30 16:30:32

既然你问了Redim vs擦除记忆的后果.唯一的实际区别是动态数组。

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

如果您擦除一个动态数组,它将完全释放内存。Dim Array()

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

从“擦除”上的帮助:

代码语言:javascript
复制
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.
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38128435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档