FORWARD_NULL与C中的UNINIT Coverity错误

时间:2018-11-13 11:59:31

标签: c coverity

当指针初始化为NULL时,获得“ FORWARD_NULL”覆盖率错误,而当删除NULL初始化时,它将引发UNINIT覆盖率错误。代码如下。

我对报道非常陌生。如果这也是一个非常基本的问题,请提供帮助。

我是

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

谢谢, 普雷特西

2 个答案:

答案 0 :(得分:2)

在这样的代码中:

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

答案 1 :(得分:0)

这很容易帮助:

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