#ERROR#使用了未初始化的本地指针变量'ptrNames'

时间:2013-10-29 16:46:17

标签: 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 
        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;
    }
}

2 个答案:

答案 0 :(得分:9)

错误是正确的。只有在测试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;
    ...
}

答案 1 :(得分:1)

您需要将ptrNames变量初始化为某些内容。 if (*ptr < minZ)可能会阻止ptrNames被设置为某个东西,你会指向一个你不知道并可能破坏所有东西的指针。