C语言中的前向_NULL与非IT转换错误

C语言中的前向_NULL与非IT转换错误,c,coverity,C,Coverity,当指针初始化为NULL时,会出现“FORWARD_NULL”恢复性错误;当移除NULL初始化时,会抛出unnit恢复性错误。代码如下 我对coverity很陌生。如果这也是一个非常基本的问题,请帮助 我是 1) 声明一个指针 2) 将其初始化为NULL并 3) 推迟而不给它分配任何东西 这种差异是函数调用中的一个参数,它将在函数调用中填充。正在转发相同的错误。从Coverity作品开始,仅从昨天开始 int fn1() { strct1 *pvarA = NULL; if (fn

当指针初始化为NULL时,会出现“FORWARD_NULL”恢复性错误;当移除NULL初始化时,会抛出unnit恢复性错误。代码如下

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

我是

1) 声明一个指针

2) 将其初始化为NULL并

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

这种差异是函数调用中的一个参数,它将在函数调用中填充。正在转发相同的错误。从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
在未检查null的情况下取消引用(因此
FORWARD\u 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;
}
#包括
#包括
#包括
内部fn1(内部**ar)
{
int*a=NULL;
if(ar==NULL){
fprintf(stderr,“Omg!您将NULL作为第一个参数传递给了fn1函数。现在要做什么?一定要中断程序流-return或abort()或exit()!”;
中止();
返回退出失败;
}
a=*ar;
返回退出成功;
}
这很容易:

#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;
}
#包括
#包括
#包括
strct1
{
INTA;
int b;
字符c;
};
int fn1()
{
strct1*pvarA=NULL;
strct1内翻;
MEMSET(&varA,0,sizeof(strct1));
pvarA=&varA;
if(fn2(&pvarA)!=0)//解除传递空指针错误。
{
返回1;
}
/*一些代码*/
}
内部fn2(strct1**pvarA)
{
/*一些代码*/
*pvarA=varA;
/*一些代码*/
返回0;
}

这段代码对您有什么意义?至于它为什么抱怨如果你删除空值,我们不能说没有空值。这也可能是一个工具错误,但没有人能从这里给出的内容判断。FORWARD_NULL表示您正在取消引用
NULL
,但这不是您的代码显示的内容。您的代码与您的问题不匹配。你是说a=**ar?不是。它是匹配的@Jabberwocky我想做
a=*ar
。但是在
int*a=NULL
行中,如注释
/**/
中所述,获取coverity错误,非常感谢。试试看。一旦它开始工作,将更新它作为答案。我这样做:
intfn1(int**ar){int*a=NULL;/*抛出前向NULL,当NULL被删除时,coverity抛出unint错误。*/if(ar==NULL){return 1;}a=*ar;}
我的coverity错误仍然存在@卡米尔