FORWARD_NULL 与 C 中的 UNINIT Coverity 错误

FORWARD_NULL Vs UNINIT Coverity errors in C

当一个指针被初始化为 NULL 时,得到 "FORWARD_NULL" 覆盖错误,当 NULL 初始化被移除时,它会抛出 UNINIT 覆盖错误。代码如下

我对 Coverity 很陌生。如果这也是一个非常基本的问题,请帮助。

我是

1) 声明一个指针,

2) 将其初始化为 NULL 和

3) 推迟它而不给它分配任何东西。

此引用是函数调用中的一个参数,它将在其中被填充。同样会出现 FORWARD_NULL 错误。仅从昨天开始使用 Coverity 作品。

int fn1()
{
    strct1 *pvarA = NULL;
    if (fn2(&pvarA) != 0) // derefering NULL pointer error.
    {
        return 1;
    }
    ...
    /* some code */
}

int fn2(strct1 **pvarA)
{
    ...
    /* some code */
    *pvarA = varA;
    /* some code */
    return 0;
}

谢谢, Preethi

在这样的代码中:

int fn1(int **ar)
{
    int *a;
    a = *ar;
}

变量 a 未初始化(因此 UNINIT)并且变量 ar 被取消引用而不检查空值(因此 FORWARD_NULL)。

这段代码可能会起作用:

#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>

int fn1(int **ar)
{
   int *a = NULL;
   if (ar == NULL) {
        fprintf(stderr, "Omg! you passed NULL as first argument to fn1 function. What to do now? Break the program flow for sure - return or abort() or exit() !");
        abort();
        return EXIT_FAILURE;
    }
    a = *ar;
    return EXIT_SUCCESS;
}

这很容易帮助:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

strct1
{
    int a;
    int b;
    char c;
};

int fn1()
{
    strct1 *pvarA = NULL;
    strct1 varA;

    MEMSET(&varA, 0, sizeof (strct1));
    pvarA = &varA;
    if (fn2(&pvarA) != 0) // derefering NULL pointer error.
    {
        return 1;
    }
    /* some code */
}

int fn2(strct1 **pvarA)
{
    /* some code */
    *pvarA = varA;
    /* some code */
    return 0;
}