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;
}
当一个指针被初始化为 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;
}