我正在尝试使用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;
答案 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,则应在分配任何内容之前进行检查,以避免运行时错误。