Allocation dynamique de tableau de structures...

Résolu
manta7 Messages postés 105 Date d'inscription samedi 25 janvier 2003 Statut Membre Dernière intervention 13 décembre 2008 - 22 mai 2007 à 18:58
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

6 réponses

BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
22 mai 2007 à 20:44
typedef struct _UNITE {
    int right, left, up, down;
} UNITE, *LPUNITE;


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

ciao...
BruNews, MVP VC++
3
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 4
22 mai 2007 à 19:17
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.
0
tibob51 Messages postés 268 Date d'inscription vendredi 30 avril 2004 Statut Membre Dernière intervention 13 mai 2013 2
22 mai 2007 à 20:28
int nb;
unite=new unite[nb];
//pour le dtruire
delete[] unite;
0
acx01b Messages postés 280 Date d'inscription dimanche 7 septembre 2003 Statut Membre Dernière intervention 8 juillet 2014 6
23 mai 2007 à 13:33
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
23 mai 2007 à 21:26
Question d'habitude, on l'emploie énormément sous Windows.

ciao...
BruNews, MVP VC++
0
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
Merci pour vos réponses au fait ça marche et c'est niquel.
0