VB.NET中的空取消引用

时间:2018-08-15 19:24:03

标签: vb.net

我正在审查我们的许多申请。一个应用程序返回了很多空引用问题。值得一提的是,我对VB.NET不太熟悉,因此请耐心等待我的代码中提供的任何信息。

Public Sub SomeMethod()
    Try
        PerformLog("Entering SomeMethod")
        Dim intTemp As Short

        Erase gstrFieldWhatever //Defined earlier: Public gstrFieldWhatever() As String

        ...

        intTemp = intTemp + 1
        ReDim Preserve gstrFieldWhatever(intTemp)
        gstrFieldWhatever(intTemp) = "Z*L-"

分析器(本例中为Fortify)报告Erase gstrFieldWhatever会导致潜在的空异常,当我们稍后尝试在gstrFieldWhatever(intTemp) = "Z*L-"上调用它时。但是,我们使用ReDim Preserve gstrFieldWhatever(intTemp)应该创建一个新数组。如果是这种情况,为什么分析仪会指出潜在的空解除引用问题?

1 个答案:

答案 0 :(得分:2)

gstrFieldWhatever是一个公共字段。如果在多线程代码中使用此对象,则存在风险,因为可以在释放字段和重新定义字段之间进行访问。

在大多数情况下,使用ReDim Preserve表示您确实想要List(Of String)之类的集合的地方,但是,我知道该更改是否可能级联到代码的其他区域。