Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Allocation de structure dans une structure
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Allocation de structure dans une structure

Posté le 19/01/2015 21:54

Salut,
Bon je crois que je suis arrivé a mes limites en programation et je bloque severe ...
Mais bon au fond c'est ca qui est bon
Donc voila mon code:
Hero hero;

typedef struct
{
    char *name;
    
    int type;
    
    int number;
    int attackPoint;
    int defensePoint;
} Object;

typedef struct
{
    int life;
    int level;
    int gold;
    int xp;
    
    int nbrObject;
    Object* objects;
    
    int x;
    int y;
} Hero;


void Engine_addObject(int id, int nbr, int ap, int dp)
{
    Object* ptr;
    
    char *objectsNames[6] = {
        "Some food",
        "A bow",
        "A ring",
        "A dentist",
        "Salut"
    };
    int objectsTypes[6] = {
        2,
        1,
        1,
        1,
        3
    };
    
    hero.nbrObject++;
    if( realloc((Object*)(hero.objects), hero.nbrObject * sizeof(Object)) != NULL )
    {
        hero.objects[hero.nbrObject-1].name = objectsNames[id];
        hero.objects[hero.nbrObject-1].type = objectsTypes[id];
        hero.objects[hero.nbrObject-1].number = nbr;
        hero.objects[hero.nbrObject-1].attackPoint = ap;
        hero.objects[hero.nbrObject-1].defensePoint = dp;
    }
}

J'ai un probleme apres le realloc(), un SE quand je modifie mes cases. C'est surement bete comme d'hab mais bon ...


Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 19/01/2015 22:52 | #


Realloc ne realloue pas forcément au même endroit
Du coup tes pointeurs sont pas forcements corrects. Pour ton truc, je te conseille de faire une liste chaînée
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 20/01/2015 18:35 | #


Une liste chainée
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 20/01/2015 18:37 | #


Je te suggère d'utiliser malloc et un pointeur temporaire. Je ne sais plus si realloc conserve le pointeur en cas d'échec. Sinon oui, les listes chaînées c'est une idée mais ça me semble un peu lourd pour une map.
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 20/01/2015 18:56 | #


Tu peux devellopper un peu
J'ai un peu de mal a comprendre comment faire la avec le pointeur temporaire
Eiyeron Hors ligne Ancien modérateur Points: 5525 Défis: 57 Message

Citer : Posté le 20/01/2015 18:58 | #



type* pointeurTemporaire = malloc(taille);
if(pointeurTemporaire != NULL) {
    //copier données, la flemme de sortir la syntaxe de memcpy
    free(pointeur);
    pointeur = pointeurTemporaire;
}
Lephenixnoir En ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 20/01/2015 20:07 | #


Eiyeron a écrit :
Je te suggère d'utiliser malloc et un pointeur temporaire. Je ne sais plus si realloc conserve le pointeur en cas d'échec.

Non justement, et c'est le gros problème de cette fonction : en cas d'erreur elle renvoie NULL, ce qui écrase l'ancienne adresse, mais la mémoire n'est pas libérée !
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 94 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd