C28182

Warnung C28182: Dereferenzieren des NULL-Zeigers.

Zusätzliche Informationen: <pointer1> enthält dieselben NULL-Wert, wie das <pointer2><note>

Das Codeanalysetool meldet diese Warnung, wenn es wird überprüft, ob der Zeiger NULL sein kann.Wenn es unbestätigte Instanzen gibt, in denen der Fehler möglicherweise früher in der Ablaufverfolgung ausgeführte, fügt das Codeanalysetool der Zeilennummer der ersten Instanz der Warnmeldung hinzu, damit Sie den Code ändern können, um alle Instanzen zu begegnen.

<pointer2> wird bestätigt, um möglicherweise NULL sein.<pointer1> enthält den gleichen Wert wie pointer2 und wird dereferenziert.Da diese Zeiger möglicherweise für sehr unterschiedlichen Stellen im Code sind, werden beide gemeldet, damit Sie feststellen können, warum das Codeanalysetool diese Warnung ausgegeben.

Wenn eine unbestätigte frühere Instanz der Bedingung vorhanden ist, wird <note> durch diesen Text ersetzt: "Siehe Zeile <number> für einen früheren Speicherort, an dem das auftreten kann."

Beispiel

Das folgende Beispiel zeigt Code, der das Codeanalysetool, können bewirken diese Warnmeldung zu generieren.In diesem Beispiel wird das Codeanalysetool, dass pNodeFree in der Anweisung if NULL ist, und der Code in den Text if wird ausgeführt.Da nBlockSize möglicherweise ist, wird der Text der for-Anweisung nicht ausgeführt und pNodeFree unverändert gelassen wird.pNodepNodeFree wird dann zugewiesen, und pNode wird verwendet, während eine NULL-Zeichenfolge kann auftreten.

typedef struct xlist {
    struct xlist *pNext;
    struct xlist *pPrev;
} list;

list *pNodeFree;
list *masterList;
int nBlockSize;

void fun()
{
    if (pNodeFree == 0)
    {
        list *pNode = masterList;

        for (int i = nBlockSize-1; i >= 0; i--, pNode--)
        {
            pNode->pNext = pNodeFree;
            pNodeFree = pNode;
        }
    }

    list* pNode = pNodeFree;
    pNode->pPrev = 0;
}

Das Codeanalysetool meldet die folgende Warnung:

:\sample\testfile.cpp(24) : warning C28182: Dereferencing NULL pointer. 'pNode' contains the same NULL value as 'pNodeFree' did.: Lines: 12, 14, 16, 23, 24

Eine Möglichkeit, das vorherige Beispiel zu korrigieren, wird eine pNode für null zu überprüfen, bevor sie es dereferenziert, damit eine abgewendet NULL wird.Der folgende Code veranschaulicht diese Korrektur an.

typedef struct xlist {
    struct xlist *pNext;
    struct xlist *pPrev;
} list;

list *pNodeFree;
list *masterList;
int nBlockSize;

void fun()
{
    if (pNodeFree == 0)
    {
        list *pNode = masterList;

        for (int i = nBlockSize-1; i >= 0; i--, pNode--)
        {
            pNode->pNext = pNodeFree;
            pNodeFree = pNode;
        }
    }

    list* pNode = pNodeFree;
    if(pNode != 0)
      pNode->pPrev = 0;
}