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

Signaler
Messages postés
105
Date d'inscription
samedi 25 janvier 2003
Statut
Membre
Dernière intervention
13 décembre 2008
-
Messages postés
105
Date d'inscription
samedi 25 janvier 2003
Statut
Membre
Dernière intervention
13 décembre 2008
-
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

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


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

ciao...
BruNews, MVP VC++
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
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.
Messages postés
268
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
13 mai 2013
2
int nb;
unite=new unite[nb];
//pour le dtruire
delete[] unite;
Messages postés
280
Date d'inscription
dimanche 7 septembre 2003
Statut
Membre
Dernière intervention
8 juillet 2014
4
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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
Question d'habitude, on l'emploie énormément sous Windows.

ciao...
BruNews, MVP VC++
Messages postés
105
Date d'inscription
samedi 25 janvier 2003
Statut
Membre
Dernière intervention
13 décembre 2008

Merci pour vos réponses au fait ça marche et c'est niquel.