2017-04-06 2 views
0

Also hier in main.c, habe ich diesen Teil des Codes, der den Inhalt von verschlüsselten druckt, wenn es nicht leer ist. Es ist wirklich so einfach.C: Cppcheck: Mögliche Nullpunktdereferenz

CPP Fehler ist:

[main.c: 40]: (Fehler) Mögliche Nullzeiger dereferenzieren: verschlüsselten - sonst ist es überflüssig, wenn an der Leitung 31 ist

null verschlüsselt zu überprüfen

Der Code:

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 

Das Ding ist, seine Arbeits soll als aber cppcheck hält mich nervt, sollte ich es beheben? ist es falsch das zu tun?

+0

Wenn Sie 40 an die Leitung zu bekommen, 'encrypted' ist definitiv null und' printf ("Encrypted: % s \ n ", verschlüsselt" ist ein undefiniertes Verhalten. – aschepler

Antwort

2

Der else Block Ihres Codes wird nur eingegeben, wenn encrypted NULL ist. Sie übergeben also einen Nullzeiger an printf. Das kann undefined behavior aufrufen.

Da Sie wissen, dass der Zeiger an diesem Punkt NULL ist, drucken Sie nur ausdrücklich, dass es NULL ist:

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

Ich sehe, danke, ich hatte das printf nur, damit ich sehen konnte, ob es Null zurückgibt, aber das sollte funktionieren! – Mathue24

+0

@ Mathue24 Froh, dass ich helfen konnte. Fühlen Sie sich frei, diese Antwort zu akzeptieren (http://stackoverflow.com/help/accepted-answer), wenn Sie es nützlich fanden. – dbush

+0

@ Mathue24: Beachten Sie, dass es nur eine Höflichkeit ist, die glibc macht Sie zu drucken "(Null)", wenn Sie eine NULL-Zeichenfolge übergeben - es ist nicht durch den Standard vorgeschrieben, und gcc selbst schreibt routinemäßig 'printf' Anrufe zu' puts' Anrufe, wo es gerade abstürzt, wenn NULL übergeben wird. Wenn Sie einen Debug-Ausdruck hinzufügen müssen, um festzustellen, ob der String nicht NULL ist, führen Sie ihn explizit wie oben gezeigt aus. –

Verwandte Themen