我正在审查我们的许多申请。一个应用程序返回了很多空引用问题。值得一提的是,我对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)
应该创建一个新数组。如果是这种情况,为什么分析仪会指出潜在的空解除引用问题?
答案 0 :(得分:2)
gstrFieldWhatever
是一个公共字段。如果在多线程代码中使用此对象,则存在风险,因为可以在释放字段和重新定义字段之间进行访问。
在大多数情况下,使用ReDim Preserve
表示您确实想要List(Of String)
之类的集合的地方,但是,我知道该更改是否可能级联到代码的其他区域。