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

时间:2017-04-06 20:13:28

标签: c null cppcheck

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

cpp错误是:

  

[main.c:40] :(错误)可能的空指针取消引用:加密 -   否则在第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一直在烦我,我应该修复它吗?这样做是不对的?

1 个答案:

答案 0 :(得分:2)

只有在else为NULL时才会输入代码的encrypted块。所以你将NULL指针传递给printf。这可以调用undefined behavior

由于您知道该点的指针为NULL,因此只需显式打印它为NULL:

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