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