C++ #错误#可能未初始化的局部指针变量';ptrNames';习惯于

C++ #错误#可能未初始化的局部指针变量';ptrNames';习惯于,c++,pointers,opengl,C++,Pointers,Opengl,如果运行以下代码,则会出现错误“使用了可能未初始化的本地指针变量“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 n

如果运行以下代码,则会出现错误“使用了可能未初始化的本地指针变量“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;
    }
}
void processHits(闪烁命中,GLuint buffer[])//一些打印
{
无符号整数i,j;
GLuint名称,*ptr,minZ,*ptrname,numberofname;
如果(点击次数==0)
noSelected=正确;
其他的
无选择=错误;
ptr=(GLuint*)缓冲区;
minZ=0xffffffff;
对于(i=0;i0)
LastSelected=*ptr;
}
}

错误是正确的<只有当测试
if(*ptr
成功时,才会初始化code>ptrNames

最简单的修复方法可能是将
ptrNames
初始化为
NULL
,然后在第一个
循环之后检查其值,如果没有更新,则返回(因为没有要处理的点击)

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;
    ...
}

您需要将
ptrNames
变量初始化为某个值。
if(*ptr
可能会阻止
ptrNames
被设置为某个值,因此,您将有一个指针指向您不知道的地方,并可能破坏一切。

至少显示一些努力。您不了解错误消息的哪一部分?在后一种情况下,
ptrNames
的可能重复项在分配发生时仍将未初始化。它在for循环之外,由于格式错误,可能不容易看到。@ArneMertz谢谢。我已经更新了问题中的格式以使其更清晰。我会马上更新我的答案。。。