C ++错误:IntilliSense标识符" track"未定义 - "可能未初始化的本地指针变量' track'"

时间:2014-06-20 21:26:10

标签: c++ visual-studio opencv visual-studio-2013 cvblobslib

我正在尝试使用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; 

2 个答案:

答案 0 :(得分:1)

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

如果实际上在曲目列表中找到了该功能,该功能应该只尝试更新机架。

blob的情况可能类似。

答案 1 :(得分:1)

你应该避免在不给它们赋值的情况下声明指针。因此,您应该用

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

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