Aracılığıyla paylaş


C28182

C28182 Uyarı: null işaretçi bilgileri başvuru kaldırma.

Ek bilgi: <pointer1> aynı null değeri içeren <pointer2> mi <note>

İşaretçi null olabilir yanıtıyla onayladığında kod çözümleme aracını bu uyarıyı bildirir.Teyit edilmemiş örnekleri burada hata izleme daha önce ortaya çıkabilir, hepsinin adres kodunu değiştirebilirsiniz kod çözümleme aracını ilk örnek satır sayısı bir uyarı iletisi ekler.

<pointer2> sağlayabilecek null olarak onaylanır.<pointer1> aynı değeri içeren pointer2 ve başvuru yapıldı.Çünkü bu işaretçileri kod çok farklı yerlerde olabilir, böylece kod çözümleme aracını bu uyarıyı neden bildirdiği belirlemek hem de bildirilir.

Koşulun teyit edilmemiş bir önceki örnek, sonra olup <note> bu metne göre değiştirilir: "satırı Bkz: <number> bir önceki konum nerede bu meydana gelebilir."

Örnek

Aşağıdaki örnek kod çözümleme aracı, bu uyarı iletisini oluşturmak neden kodu gösterilir.Kod çözümleme aracı, bu örnekte belirler pNodeFree içinde null if deyimi ve gövdesi içine kod yolu if alınır.Ancak, çünkü nBlockSize sıfır potansiyel gövdesi olan for deyimi yürütülmez ve pNodeFree sol değiştirilmedi.pNodeFreesonra atandığı pNode, ve pNode bir null başvuru oluşurken kullanılır.

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;
}

Kod çözümleme aracı, aşağıdaki uyarı raporları:

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

Önceki örnek düzeltmek için bir yolu olduğunu denetlemek için pNode için null başvuru averted böylece onu başvurusunun kaldırılması önce sıfır.Bu düzeltme aşağıdaki kodu gösterilir.

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;
}