Allocation dynamique de tableau de structures... [Résolu]

Messages postés
105
Date d'inscription
samedi 25 janvier 2003
Statut
Membre
Dernière intervention
13 décembre 2008
- - Dernière réponse : manta7
Messages postés
105
Date d'inscription
samedi 25 janvier 2003
Statut
Membre
Dernière intervention
13 décembre 2008
- 25 mai 2007 à 16:40
Le titre est déja pas mal compliqué...
Voila je vous explique mon probleme avec une allocation simple :
J'ai la structure

struct unite {
    int right, left, up, down;
}unite[4];

Je l'emploie normalement en utilisant des unite[0].right=42....

Mais j'ai eu envie de le faire dynamiquement alors j'écris

struct unite {

    int right, left, up, down;

}*unite;

en allouant avec un

unite=malloc(NUNITE*sizeof(struct unite)); (NUNITE c'est une constante qui est égale a 4 pr le précédent exemple.

Et la bien entendu je tombe sur un bon vieux segfault...
Je pense que la solution est dans une allocation au cas par cas en utilisant un for de 0 à NUNITE mais je n'y suis pas parvenu non plus..

Pliz
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
3
Merci
typedef struct _UNITE {
    int right, left, up, down;
} UNITE, *LPUNITE;


UNITE *punite;
punite = (LPUNITE) malloc(sizeof(UNITE) * 4);

ciao...
BruNews, MVP VC++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 190 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BruNews
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
0
Merci
Salut,

si tu déclare unite comme un pointeur, sizeof(unite) ne representera
pas la taille de ta structure, mais la taille d'un pointeur (qui est
plus petit que ta structure).

Le mieux est de déclarer deux types:

struct unite {

    int right, left, up, down;

}unite, *p_unite;

et d'utiliser le bon type au bon endroit.
Commenter la réponse de cs_aardman
Messages postés
268
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
13 mai 2013
2
0
Merci
int nb;
unite=new unite[nb];
//pour le dtruire
delete[] unite;
Commenter la réponse de tibob51
Messages postés
280
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
8 juillet 2014
3
0
Merci
Salut

je sais pas pour vous mais personnelement je déteste les typedef et autres #define d'un type représentant un pointeur ou un tableau

si le type est un pointeur alors il doit y avoir des * qui le montrent
si le type est un tableau alors il doit y avoir des [] qui le montrent
Commenter la réponse de acx01b
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
0
Merci
Question d'habitude, on l'emploie énormément sous Windows.

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
105
Date d'inscription
samedi 25 janvier 2003
Statut
Membre
Dernière intervention
13 décembre 2008
0
Merci
Merci pour vos réponses au fait ça marche et c'est niquel.
Commenter la réponse de manta7