Warnung C28182
Dereferenzierender NULL-Zeiger.
Zusätzliche Informationen: Zeiger1> enthält den gleichen NULL-Wert wie< zeiger2>.< <Hinweis>
Das Codeanalysetool meldet diese Warnung, wenn bestätigt wird, dass der Zeiger NULL sein kann. Wenn es nicht bestätigte Instanzen gibt, in denen der Fehler früher in der Ablaufverfolgung auftreten kann, fügt das Codeanalysetool der Warnmeldung die Zeilennummer der ersten Instanz hinzu, sodass Sie den Code so ändern können, dass alle Instanzen behandelt werden.
<Zeiger2> wird als potenziell NULL bestätigt. <Zeiger1> enthält denselben Wert wie Zeiger2 und wird abgeleitet. Da sich diese Zeiger möglicherweise an verschiedenen Stellen im Code befinden, werden beide gemeldet, sodass Sie bestimmen können, warum das Codeanalysetool diese Warnung meldet.
Wenn eine nicht bestätigte frühere Instanz der Bedingung vorhanden ist, <>wird diese durch diesen Text ersetzt: "Siehe Zeilennummer <> für einen früheren Ort, an dem dies auftreten kann."
Beispiele
Das folgende Beispiel zeigt Code, der dazu führen kann, dass das Codeanalysetool diese Warnmeldung generiert. In diesem Beispiel bestimmt das Codeanalysetool, dass pNodeFree
in der if
Anweisung NULL ist, und der Codepfad in den Textkörper der if
Datei wird übernommen. Da nBlockSize
jedoch potenziell null ist, wird der Textkörper der for
Anweisung nicht ausgeführt und pNodeFree
bleibt unverändert. pNodeFree
wird dann zugewiesen pNode
und pNode
wird verwendet, während eine NULL-Ableitung auftreten kann.
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 zum Korrigieren des früheren Beispiels besteht darin, vor dem Ableiten auf Null zu überprüfen pNode
, sodass eine NULL-Ableitung aufgehoben wird. Der folgende Code zeigt diese Korrektur.
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;
}
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für