当指针初始化为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;
}
谢谢, 普雷特西
答案 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;
}