67 votes

Conversion invalide de `void*' en `char*' lors de l'utilisation de malloc ?

J'ai des problèmes avec le code ci-dessous avec l'erreur à la ligne 5 :

erreur : conversion invalide de void* a char*

J'utilise g++ avec codeblocks et j'ai essayé de compiler ce fichier comme un fichier cpp. Est-ce important ?

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

132voto

karlphillip Points 46502

En C++, vous devez convertir le retour de la fonction malloc()

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

28voto

Marlon Points 11528

Le C++ est conçu pour être plus sûr au niveau des types que le C. Par conséquent, vous ne pouvez pas (automatiquement) convertir de void* à un autre type de pointeur. Puisque votre fichier est un .cpp votre compilateur s'attend à du code C++ et, comme mentionné précédemment, votre appel à malloc ne compilera pas puisque vous assignez une valeur de char* à un void* .

Si vous changez votre fichier en un .c alors il s'attendra à un code C. En C, vous n'avez pas besoin de spécifier un cast entre void* et un autre type de pointeur. Si vous changez votre fichier en un .c il compilera avec succès.

7voto

viraptor Points 12779

Je suppose que c'est la ligne avec malloc. Il suffit de caster le résultat alors - char *foo = (char*)...

5voto

AndreyT Points 139512

Alors, quelle était votre intention ? Essayez-vous d'écrire un programme en C ou en C++ ?

Si vous avez besoin d'un programme en C, ne le compilez pas en C++, c'est-à-dire ne donnez pas l'extension ".cpp" à votre fichier ou demandez explicitement au compilateur de traiter votre fichier en C. En langage C, vous ne devez pas convertir le résultat de malloc . Je suppose que c'est ce dont vous avez besoin puisque vous avez marqué votre question comme [C].

Si vous avez besoin d'un programme C++ qui utilise malloc alors vous n'avez pas d'autre choix que d'intégrer explicitement la valeur de retour de la fonction malloc au type approprié.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X