gpt4 book ai didi

c - "Unreachable code"检查指针是否为 "NULL"时发出警报

转载 作者:行者123 更新时间:2023-11-30 14:45:06 25 4
gpt4 key购买 nike

我正在开发一个用 C 语言编写的 Linux 应用程序,该应用程序必须通过 Polyspace 的 Code Prover 和 Bug Finder。我在尝试检查指针是否为 NULL 的某些函数中收到一些“灰色”警报。

以下是获取警报的函数之一的示例:

int soc = 0;

static int OpenPort(const char *port)
{
int ret_status_code = 0;
struct sockaddr_can sock_addr;
can_err_mask_t err_mask = (CAN_ERR_TX_TIMEOUT | CAN_ERR_LOSTARB |
CAN_ERR_CRTL | CAN_ERR_PROT | CAN_ERR_TRX | CAN_ERR_ACK |
CAN_ERR_BUSOFF | CAN_ERR_BUSERROR | CAN_ERR_RESTARTED);

soc = socket(AF_CAN, SOCK_RAW | SOCK_NONBLOCK, CAN_RAW);

if(port == NULL){ /* Grey alert triggers for this line */
syslog(LOG_ERR | LOG_USER, "NULL pointer passed to function");
ret_status_code = -1;
}
else if(soc < 0){
syslog(LOG_ERR | LOG_USER, "Can't open socket");
ret_status_code = -1;

}else{
/* Proceed if everything was OK */
}

return ret_status_code;
}/*OpenPort*/

我拥有的所有检查 const char *pointer 的函数都会收到此警报,但由于某种原因,还有其他函数,我以相同的方式检查用户定义的结构指针,但仅在其中一个函数中收到警报。

我想知道的第一件事是是否有人可以向我解释 Polyspace 如何检查此警报(我的编译器似乎没有识别任何无法访问的 block )。

谢谢。

最佳答案

port == NULL 检查似乎有效,除非代码检查器还包括该函数的所有调用,并确定它永远不会使用空端口调用。该函数是静态的,因此所有调用都仅限于当前编译单元。

正如您所说,“*port 指针由函数 main() 提供,该函数依次收集命令行参数的内容以获取进入“port”的实际字符串名称。”

显然,代码检查器还检查了函数的调用方式,并确定永远不会使用空端口调用它。那么 port == NULL 分支之后的所有代码都将无法到达,因此会出现该消息。

请注意,如果该函数不是静态的,则代码检查器无法做出此确定,因为它不知道如何从其他编译单元调用该函数(同样,除非它将在其分析中包含所有模块和库)。 ..)

关于c - "Unreachable code"检查指针是否为 "NULL"时发出警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53260453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com