1. 程式人生 > 其它 >TSINGSEE青犀視訊行人檢測功能分割陣列報錯panic: runtime error問題排查

TSINGSEE青犀視訊行人檢測功能分割陣列報錯panic: runtime error問題排查

我們開發的行人檢測功能仍在園區測試中,目前正在進行進行人數的編譯,簡單說就是一個分析總客流的功能。我們主要的實現方式是先通過python程式將每天的時間段(毫秒級)的行人制作一個數據庫,人數和人數ID都儲存到資料庫。已被分析,如找出0人的時間段和在0人之間的總人數。

在分割0人時,出現超出陣列的範圍。

錯誤日誌:“panic: runtime error: index out of range [-1]
Goroutine 115 [running]:
Gitee.com/xxxxx”

先找到對應的錯誤資訊點,再使用除錯工具進行除錯。從上面的圖中我們可以看到一個函式:“FindDatabasePersons”:

此函式就是從歷史的資料庫查詢符合條件的人數用於替換,進到此函式裡面有個“DoSplitZeroPerson”函式,主要錯誤在此處。

yMd := fmt.Sprintf("%d_%02d_%02d", y, m, d)
if !IsTSnap(yMd, sh, eh) { //首先查詢資料庫,把資料儲存,下次就不用在查詢資料庫,節省時間
   if IsTable(yMd) {
      base := QuerySqlTableToWhere(yMd, sql)
      newBase := DoSplitZeroPerson(base, 2 * 1000)
      for i:=0;i<len(newBase)-1;i++ {
         sql.StartTimestamp = newBase[i].Timestamp
         sql.EndTimestamp = newBase[i+1].Timestamp

主要問題是最後的if判斷,是有問題的。

所以問題最後一個if判斷中,將newBase這個數組裡面的長度減去1,如果newBase陣列沒有值是一個空的陣列,那麼減去1,此陣列就會取下標為負數。取負數下標是有問題的,所以上面的報錯是有個”[-1]”。要修改也很簡單,在加個if判斷即可: