C: Cppcheck:可能的空点取消引用

标签 c null cppcheck

所以在 main.c 中,我得到了打印加密内容的这部分代码如果它不为空。就这么简单。

cpp错误是:

[main.c:40]: (error) Possible null pointer dereference: encrypted - otherwise it is redundant to check if encrypted is null at line 31

代码:

char* encrypted = bmp_encrypt(key, text);
    if(encrypted != NULL) //error points here (line 31)
    {
        printf("Encrypted:");
        for(int i=0; i<strlen(text);i++)
        {
            printf("%x ", (unsigned char) encrypted[i]);
        }
        printf("\n");
    }
    else{printf("Encrypted:%s\n", encrypted);} //this is line 40

问题是,它按预期工作,但 cppcheck 一直困扰着我,我应该修复它吗?这样做错了吗?

最佳答案

只有当 encrypted 为 NULL 时,您的代码的 else block 才会被输入。因此,您将 NULL 指针传递给 printf。那可以调用 undefined behavior .

因为你知道此时指针为 NULL,只需显式打印它为 NULL:

else{printf("Encrypted: (null)\n");} 

关于C: Cppcheck:可能的空点取消引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43264942/

相关文章:

c - 非敏感信息的TCP客户端请求/服务器响应的安全考虑

java - java中for元素包含null

c++ - 使 cppcheck 跳过包定义

存储出现索引的代码不起作用

C 代码(带逗号运算符)到 Delphi

objective-c - 核心数据中没有默认值的可选(数字)属性 - 为什么不鼓励使用它们?

c++ - 初始化指针 vector (自动)

cppcheck : Buffer is accessed out of bounds

c++ - 如何使用 cppcheck 查找函数是否存在于 cpp 文件中?

c++ - 为什么现在 "{static const char a[]={...}"和 "{const char a[]={...}"之间存在差异?