zoukankan      html  css  js  c++  java
  • 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判断即可:

  • 相关阅读:
    2015第二周日
    2015第二周六
    2015第二周五
    反思java web的发展
    servlet/filter/listener/interceptor区别与联系
    WSSecurity简述
    2015第2周一数据传输安全
    2015第一周日
    2015第1周六2015技术努力方向
    插入排序
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/15471659.html
Copyright © 2011-2022 走看看