#错误# 可能未初始化的局部指针变量'ptrNames'使用

#ERROR# potentially uninitialized local pointer variable 'ptrNames' used

本文关键字:使用 变量 ptrNames 指针 局部 错误 初始化      更新时间:2023-10-16

如果我运行以下代码,我会收到错误"可能未初始化的本地指针变量'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;
    ...
}
您需要将

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