Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2409 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C] Initialisation d'un tableau constant

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Initialisation d'un tableau constant

n°1871142
Caille Rot​ie
Posté le 08-04-2009 à 15:12:10  profilanswer
 

Bonjour à tous.
 
Me remettant au C avec une certaine difficulté, j'ai décidé de tenté d'écrire du code propre, c'est-à-dire, entre autre, d'utiliser les const.
 
De ce que j'ai compris, le const avec un passage par valeur marche très bien puisque le passage par valeur est similaire à une initialisation de l'élément en question.
On initialise la variable locale constante de la fonction avec la variable passée en paramètre (qui n'est pas nécessairement const, elle)
 
Mon problème est que, gérant des gros objets et des tableau, je ne fais pas de passage par valeur mais des passages par référence.
Du coup, j'arrive pas à homogénéiser mon code et j'ai des warning (voire des erreur) un peu partout de non correspondance de mes types.
 
Alors, avez vous une solution pour écrire une fonction qui initialise un tableau d'objets qui seront constants suite à cette initialisation ?
Et l'allocation de ce tableau ? Je peux la faire avant ou il faut que ce soit dans la fonction d'inialisation ?
Comment fonctionne exactement cette allocation ?

Code :
  1. tab = g_new(Objet const, n);
  2. tab = malloc(Objet const*, sizeof(Objet const)*n); //quasiéquivalent, si je ne m'abuse

Merci pour vos éclairages.

mood
Publicité
Posté le 08-04-2009 à 15:12:10  profilanswer
 

n°1871177
olivthill
Posté le 08-04-2009 à 16:09:05  profilanswer
 

Un petit éclairage :  
 
Le const est indépendant de la réservation d'espace mémoire. Le mettre dans les paramètres qui sont dans un malloc n'a pas de sens.
 
La fonction malloc() s'utilise en C.
 
Les objets s'utilisent en C++. L'allocation mémoire en C++ est réalisée avec new. Si on utilise malloc(), cela peut marcher dans certains cas particuliers, mais il vaut mieux éviter et utiliser new à la place.

n°1871185
Taz
bisounours-codeur
Posté le 08-04-2009 à 16:37:23  profilanswer
 

Le const c'est une erreur ici: si tu marques un objet nouvellement alloué const, tu ne pourras rien à faire, sauf à re-caster pour péter le const.
 
 
Les fonctions g_ de glib et les macros g_new* sont des allocateurs mémoires différents à libérer avec g_free. L'avantage c'est par exemple qu'il n'y a pas de vérification à faire sur la valeur de retour, ça ne renvoie jamais NULL.

n°1871201
Caille Rot​ie
Posté le 08-04-2009 à 17:14:31  profilanswer
 

Merci pour les précisions sur l'allocation, j'y vois plus clair.
Sinon, je parle d'objet (parce que je suis fan d'objets) mais je suis contrainte au c (et non C++) donc ce sont bien évidement des structures.
 
Alors, en voulant reposer la question proprement, je suis arrivée à une solution.
En fait, mon problème venant de ma structure générale de code en 4 phases :  
1/ allocation de la structure
2/ fonction void initiant la structure passée par référence
3/ utilisation de la structure en const
4/ libération de mémoire.
 
J'ai réuni les deux première phases dans une fonction qui fait l'allocation et l'initiation et retourne un Objet const * sur mon tableau.
Je sais pas si c'est mieux, mais mon compilateur n'affiche plus de warning...
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C] Initialisation d'un tableau constant

 

Sujets relatifs
[C] Parser un fichier texte[C - librairie Gtk] mettre en place une GtkListStore
Problème avec allocation dynamique de tableau (C)tri de plusieurs tableau
Créer un tableau de correspondance[C#] Surcharge accesseur SET
Explication d un tableau sérialisé 
Plus de sujets relatifs à : [C] Initialisation d'un tableau constant


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR