-1

我正在尝试使用 OpenCV 构建一个 cvblob 库,并且在 VS 2013 中编译时,

    error C4703: potentially uninitialized local pointer variable 'track' used
    error C4703: potentially uninitialized local pointer variable 'blob' used

我不确定为什么会这样,因为指针变量是在上面定义的一个块(尽管在一个单独的循环中)。这是代码:

  // Update track
  //cout << "Matching: track=" << track->id << ", blob=" << blob->label << endl;
  track->label = blob->label; // ERROR HERE
  track->centroid = blob->centroid;

我正在使用预先编写的头文件和源文件,所以我不确定问题是什么。有谁知道修复是什么?

之前//Update Track,这里是上面引用“track”和“blob”的地方,没有错误:

  // Select track
  CvTrack *track;
  unsigned int area = 0;
  for (list<CvTrack*>::const_iterator it=tt.begin(); it!=tt.end(); ++it)
  {
    CvTrack *t = *it;

    unsigned int a = (t->maxx-t->minx)*(t->maxy-t->miny);
    if (a>area)
    {
      area = a;
      track = t;
    }
  }

  // Select blob
  CvBlob *blob;
  area = 0; 
4

2 回答 2

1

如果tt列表为空,或者它不包含具有所需区域的元素,则track永远不会被初始化。这就是编译器所抱怨的。

如果实际在轨道列表中找到该功能,则该功能可能只尝试更新机架。

情况blob可能类似。

于 2014-06-20T22:45:30.733 回答
1

你应该避免声明指针而不给它们一个值。因此,您应该将声明替换为

CvTrack *track=NULL; (if you use C++ without the latest version) or
CvTrack *track=nullptr; (with C++11)

有了这个,你确定你总是会给你的指针一个值(即使它是 NULL)。然后,您应该在分配任何内容之前检查指针是否为 NULL 以避免运行时错误。

于 2014-06-20T22:51:53.030 回答