如果我运行以下代码,我会收到错误“使用了可能未初始化的局部指针变量‘ptrNames’”:
void processHits (GLint hits, GLuint buffer[]) //Some prints
{
unsigned int i, j;
GLuint names, *ptr, minZ,*ptrNames, numberOfNames;
if (hits == 0)
noSelected = true;
else
noSelected = false;
ptr = (GLuint *) buffer;
minZ = 0xffffffff;
for (i = 0; i < hits; i++) {
names = *ptr;
ptr++;
if (*ptr < minZ) {
numberOfNames = names;
minZ = *ptr;
ptrNames = ptr+2;
}
ptr += names+2;
}
ptr = ptrNames; //Error at this line!
for (j = 0; j < numberOfNames; j++,ptr++) {
if (hits > 0)
LastSelected = *ptr;
}
}
最佳答案
错误是正确的。 ptrNames
仅在测试 if (*ptr < minZ)
成功时才初始化。
最简单的解决方法可能是将 ptrNames
初始化为 NULL
,然后在第一个 for
循环后检查其值,如果尚未更新则返回(因为没有要处理的命中)。
void processHits (GLint hits, GLuint buffer[]) //Some prints
{
unsigned int i, j;
GLuint names, *ptr, minZ,*ptrNames=NULL, numberOfNames;
...
if (ptrNames == NULL)
return;
ptr = ptrNames;
...
}
关于c++ - #ERROR# 使用了可能未初始化的局部指针变量 'ptrNames',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19664314/