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判断即可:

 

posted on 2021-10-27 17:07  TSINGSEE  阅读(49)  评论(0编辑  收藏  举报