Ungültige Konvertierung von `void*’ nach `char*’ bei Verwendung von malloc?

Lesezeit: 3 Minuten

Ungultige Konvertierung von void nach char bei Verwendung von malloc
pandoragami

Ich habe Probleme mit dem folgenden Code mit dem Fehler in Zeile 5:

Fehler: Ungültige Konvertierung von void* zu char*

Ich verwende g++ mit Codeblöcken und habe versucht, diese Datei als cpp-Datei zu kompilieren. Spielt es eine Rolle?

#include <openssl/crypto.h>
int main()
{
    char *foo = malloc(1);
    if (!foo) {
        printf("malloc()");
        exit(1);
    }
    OPENSSL_cleanse(foo, 1);
    printf("cleaned one byten");
    OPENSSL_cleanse(foo, 0);
    printf("cleaned zero bytesn");
}

  • Ja, es ist wichtig. Sehen david.tribble.com/text/cdiffs.htm#C99-void-ptr .

    – Adam Rosenfield

    24. Februar 11 um 2:34 Uhr

  • Entschuldigung im Voraus für das Schreien, aber KOMPILIEREN SIE C NICHT ALS C++. Sie sind nicht dieselbe Sprache.

    – R.. GitHub HÖR AUF, EIS ZU HELFEN

    24. Februar 11 um 2:36 Uhr

  • Diese Frage ist mit beiden markiert c und c++. Wählen Sie bitte eines aus und entfernen Sie dann das andere Tag.

    – Leichtigkeitsrennen im Orbit

    17. Mai ’11 um 19:44 Uhr

1643908207 96 Ungultige Konvertierung von void nach char bei Verwendung von malloc
Karl Philipp

In C++ müssen Sie die Rückgabe von umwandeln malloc()

char *foo = (char*)malloc(1);

  • Wenn Sie C-Code schreiben (und das tun Sie), dann verwenden Sie die Erweiterung .c für den Dateinamen, und Sie werden gut sein.

    – Karl Philipp

    24. Februar 11 um 2:22 Uhr

  • @lost_with_coding – Wenn Sie C++ verwenden, markieren Sie es bitte nicht [c]. Du bist nicht dasselbe, wie diese Antwort deutlich zeigt.

    – Chris Lutz

    24. Februar 11 um 2:34 Uhr

  • Ich wollte nur darauf hinweisen, dass viele Leute es bevorzugen, dass die Besetzung auch in C aus Stilgründen explizit gemacht wird, insbesondere Arbeitsgruppen mit Programmierern, die viel zwischen C und C++ wechseln.

    – Karl Bielefeldt

    24. Februar 11 um 2:44 Uhr

  • @Karl Bielefeldt, aber es ist das Falsche, es in C zu tun, wenn es aus Stilgründen gemacht wird. Das Nichteinschließen von stdlib.h würde dazu führen, dass malloc implizit definiert wird und ein int zurückgibt. Dies zeigt Fehler an, wenn die Umwandlung zwischen int und einem Zeiger implizit ist, zeigt jedoch keine Fehler an, wenn eine explizite Umwandlung in den richtigen Typ vorliegt. Es ist sicherlich besser, die sicherere C-Form zu verwenden?

    – James Greenhalgh

    17. Mai ’11 um 22:34 Uhr


  • Eigentlich sollten Sie in C++ nicht benutzen malloc aber new

    – Basile Starynkevitch

    20. März 15 um 16:47 Uhr

1643908208 665 Ungultige Konvertierung von void nach char bei Verwendung von malloc
Marlon

C++ ist typsicherer als C, daher können Sie nicht (automatisch) konvertieren von void* zu ein anderer Zeigertyp. Da es sich bei Ihrer Datei um eine .cpperwartet Ihr Compiler C++-Code und, wie bereits erwähnt, wird Ihr Aufruf von malloc nicht kompiliert, da Sie a zuweisen char* zu einem void*.

Wenn Sie Ihre Datei in a ändern .c dann erwartet es C-Code. In C muss kein Cast between angegeben werden void* und ein anderer Zeigertyp. Wenn Sie Ihre Datei in a ändern .c es wird erfolgreich kompiliert.

Ich nehme an, das ist die Zeile mit malloc. Gießen Sie dann einfach das Ergebnis – char *foo = (char*)...

Also, was war Ihre Absicht? Versuchen Sie, ein C-Programm oder ein C++-Programm zu schreiben?

Wenn Sie ein C-Programm benötigen, dann kompilieren Sie es nicht als C++, dh geben Sie Ihrer Datei entweder keine “.cpp”-Erweiterung oder bitten Sie den Compiler explizit, Ihre Datei als C zu behandeln. In C-Sprache sollten Sie das Ergebnis nicht umwandeln von malloc. Ich gehe davon aus, dass Sie dies benötigen, da Sie Ihre Frage als markiert haben [C].

Wenn Sie ein C++-Programm benötigen, das mallocdann haben Sie keine andere Wahl, als den Rückgabewert von explizit umzuwandeln malloc zum richtigen Typ.

.

757900cookie-checkUngültige Konvertierung von `void*’ nach `char*’ bei Verwendung von malloc?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy