Pourquoi la fonction malloc() ne marche pas

Résolu
geekat Messages postés 228 Date d'inscription   Statut Membre Dernière intervention   -  
geekat Messages postés 228 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je suis sur DevC++, je code en C. Je ne connais pas la syntaxe exacte de la fonction malloc(), j'ai cherché donc sur internet et j'ai trouvé les mêmes résultats, mais quand je compile chez moi ça ne marche pas et j'ai une erreur!
Voici le code que j'ai écrit :
// Prototype
//void* malloc(size_t nombreOctetsNecessaires);
		
    int* memoireAllouee = NULL;

    memoireAllouee = malloc(sizeof(int)); // Allocation de la mémoire
    if (memoireAllouee == NULL)
    {
        exit(0);
    }


Voici ce que j'ai comme erreur :
[Error] invalid conversion from 'void*' to 'int*' [-fpermissive]


Pouvez-vous m'aider SVP ?
Merci
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Si tu obtiens ce message, c'est probablement que tu utilises le compilateur C++. C'est en effet une des différences entre le C et le C++ :-).
Vérifie bien ton compilateur.


Google is your friend
1
geekat Messages postés 228 Date d'inscription   Statut Membre Dernière intervention  
 
C'est bien ça!
J'avais l'extension cpp au lieu de c. Merci
0
SypayV Messages postés 6586 Date d'inscription   Statut Contributeur Dernière intervention   449
 
Bonjour,

malloc(sizeof(int));

C'est faux.

Par rapport au standard : http://www.cplusplus.com/reference/cstdlib/malloc/

Vous avez tout faux.
Il y a un exemple sur la page que je vous ai fourni.

Mais dans votre code, aucun besoin de malloc. Et votre code est faux puisqu'il ne sert à rien d'allouer un seul int, ou d'allouer quoique ce soit lorsque la durée de vie de la variable ne dépasse pas le scope.

Vous devriez prendre des cours sur openclassrooms.com par exemple, c'est gratuit.

Musicalement,
SypayV.
0
Utilisateur anonyme
 
Bonjour

malloc(sizeof(int)); est tout à fait correct et ne pose pas de problème par lui-même.
Ce qui pose le problème indiqué par le message d'erreur, c'est que cette fonction rend un void * et que toi tu l'affectes à une variable de type int *. Et le C n'autorise normalement pas d'affectation de pointeurs de types différents.
Si ça a marché ailleurs, c'est que tu avais affaire à un compilateur plus permissif.
Tu peux peut-être modifier le réglage du compilateur qui te sort cette erreur pour ne plus la voir, mais c'est une mauvais habitude de cacher les erreurs. On ne voit plus les vraies erreurs non plus.
Le mieux dans ton cas est de forcer explicitement le type rendu par malloc pour qu'il colle avec celui de ta variable :

memoireAllouee = (int *) malloc(sizeof(int)); // Allocation de la mémoire
0
Franck7511 Messages postés 14296 Date d'inscription   Statut Membre Dernière intervention   1 121
 
+1

Ce n'est pas le C++ qui impose le cast des pointeurs ? Je n'ai pas le souvenir de cette contrainte en C (ou alors, un Warning...)

" ou d'allouer quoique ce soit lorsque la durée de vie de la variable ne dépasse pas le scope. "

Ah ouais ? Tu alloues des gros tableaux sur le stack ? Après oui pour l'exemple le malloc ne servait effectivement pas à grand chose.
0
Utilisateur anonyme > Franck7511 Messages postés 14296 Date d'inscription   Statut Membre Dernière intervention  
 
Ce n'est pas le C++ qui impose le cast des pointeurs ?
Tu dois avoir raison. J'ai peu pratiqué le C et le C++, et il y a longtemps. J'avais l'habitude de faire ce cast, J'ai simplement testé le code sur mon PC et reproduit l'erreur, mais j'avoue ne pas avoir prêté attention si j'étais en C ou C++.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut le père,

Il faut arrêter avec cette manie de caster ces malloc() en C :-).
Petit rappel historique :
Le cast des malloc() et cie remonte au K&R, époque où le void* n'existait pas. Le type était int*. Et là, le cast était nécessaire. Depuis, le cast est superflu. Pis encore, c'est même déconseillé puisque sur certaines versions, cela peut cacher le message remonté par le compilateur au cas où on oubliait le #include...
0
Utilisateur anonyme > fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention  
 
Bonsoir fiddy

Il faut arrêter avec cette manie de caster ces malloc()
Patapé, je le ferai plus.

Je ne devrais pas me mêler de C, je ne suis qu'un bricoleur. Et ton rappel historique ne me rappelle rien, je n'ai jamais étudié le C que superficiellement dans une doc de compilateur, juste pour faire ce dont j'avais besoin. Je n'ai jamais approfondi les notions, j'ai peur que tu aies déjà eu l'occasion de le remarquer ;)

[edit] Je peux aller dormir, j'ai appris quelque chose aujourd'hui. Pourvu que je ne l'oublie pas dès demain.
0