C:Cppcheck:可能的零点取消引用
问题描述:
因此,在main.c中,我得到了这部分代码,它打印加密的内容,如果它不为空。它非常简单。C:Cppcheck:可能的零点取消引用
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一直缠着我,我应该修复它?这是否是错误的?
答
只有当encrypted
为NULL时,才会输入代码的else
块。所以你传递一个NULL指针到printf
。这可以调用undefined behavior。
既然你知道指针是在这一点上NULL,只是明确地打印为NULL:
else{printf("Encrypted: (null)\n");}
如果你到了40行,'encrypted'肯定是空的,'的printf(“加密: %s \ n“,加密)'是未定义的行为。 – aschepler