CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

malloc en c

tomtex
tomtex
Niveau 8
29 avril 2009 à 14:51:41

salut, j'aimerais savoir si mes déclarations sont bonnes :

int *entier1 ;
int *entier2 ;
int *entier3 ;

entier1=malloc(sizeof(*entier1)) ;
entier2=(int *)malloc(sizeof(int)) ;
entier2=(int *)malloc(sizeof(*entier3)) ;

d'après la compilation et l'exécution sa marche mais je préfère être sur.
merci

dnob700
dnob700
Niveau 10
29 avril 2009 à 15:31:39

la deuxième et la troisième ligne sont correcte (sauf que tu voulais mettre entier3 dans la troisième ligne). La première est correcte aussi, mais certain compilateur ne te laisserons pas convertir un void* (renvoyer par malloc) en int* sans un cast explicite, selon les options de compilation.

chris_27
chris_27
Niveau 10
29 avril 2009 à 15:43:23

Oulah, c'est très compliqué cette affaire. On en avait parlé avec Dargor sur #linux il y a très longtemps et il me que la conclusion était qu'il NE fallait PAS faire de cast explicite pour malloc.

Donc le mieux serait :
entier1 = malloc(sizeof(int)) ;

[... petit saut sur wikipedia ... ]
« You will sometimes see code in which the value returned by malloc is "cast" (see type conversion) to a specific type, as in

int *ptr = (int*)malloc(10 * sizeof (int));.

But this is bad practice: it is redundant under the C standard, as noted above; and moreover, putting in a cast may mask failure to include the header, stdlib.h, in which the prototype for malloc is found. In the absence of a prototype for malloc, the C compiler will assume that malloc returns an int, and will issue a warning in a context such as the above — provided the error is not masked by a cast. (A cast says, in effect, "Don't warn me, I know what I'm doing!" Casts should therefore be used sparingly.)
»
:d) ah oui, déjà on évite les erreurs du à l'oubli d'include de <stdlib.h>.
Il me semble qu'il y avait une autre raison (portabilité ? cross-compilation ?) mais je ne me souviens plus, et je n'ai malheureusement pas bookmarqué le lien sur lequel on était tombé à l'époque. :(

dnob700
dnob700
Niveau 10
29 avril 2009 à 17:14:13

Bon, je ne suis pas tout à fait d'accord avec cet arguments, car l'oubli de l'en tête n'est pas un problème majeure.

Mais c'est vrai que mon argument était mauvais. C'est en fait en C++ que le cast doit être explicite et non pas en C. Comme j'ai eu tendance à une époque à compiler mon code C avec des compilo C++ j'ai pris cette habitude.

Donc oui, le cast peut-être oublié sans problème et il est même complètement inutile en C.

chris_27
chris_27
Niveau 10
29 avril 2009 à 18:15:37

« l'oubli de l'en tête n'est pas un problème majeur. » :d) moi je trouve que si. Et je peste bien fort contre les compilateurs qui ajoutent des includes dans ton dos sans te prévenir. :(

tomtex
tomtex
Niveau 8
29 avril 2009 à 19:00:50

ok merci à vous, j'espère que le prof ne fera pas trop attention à ça au DS :-p

Sous forums
  • Aide à l'achat Mac
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment