如果我运行以下代码,我会收到错误“使用了可能未初始化的局部指针变量‘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/

10-13 04:03