IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèque standard C Discussion :

Problème avec realloc et struct


Sujet :

Bibliothèque standard C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Par défaut Problème avec realloc et struct
    Bonjour, j'essaie de ré allouer de la place pour ma structure :

    Voilà en gros le code (j'ai mis que ce qu'il me faut):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    struct life
    {
        struct pos position;
        struct col color;
        int time_life;
        int activate; /* 0:non, 1:oui */
        SDL_Surface *surface;
        int lifes;
     
    };
     
    int main(void)
    {
    struct life *myStruct = NULL;
     
    /* allocation et plein de trucs qui sont corrects */
     
    nbr = myStruct->lifes+1;
    myStruct->lifes+1;
    myStruct = realloc(myStruct, nbr);
     
    if(myStruct == NULL)
         return 1;
     
    (*(myStruct+nbr)).surface = createSurface();
     
    return EXIT_SUCCES;
    }
    Merci d'avance

    PS: C'est pas du tout mon code, je veux dire il manque les headers, 200 lignes de codes en plus mais c'est vrai le contenu de ces lignes :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    nbr = myStruct->lifes+1;
    myStruct->lifes+1;
    myStruct = realloc(myStruct, nbr);
    Qui est important.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    c'est :

    myStruct = realloc(myStruct, nbr*sizeof(life));


    Et en plus en général on utilise un pointeur intermédiare, pour le cas où ça échoue... et on incrémentes QUE si ça a réussi..


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if ( (ptr =  realloc(myStruct, nbr*sizeof(life))) != NULL )
      {
          myStruct = ptr ;
          myStruct->lifes = myStruct->lifes+1;
      }
    else
    {
       /* myStruct est inchangé */
       /* Code "error-proof" */
       nbr = nbr - 1 ; 
    }

  3. #3
    Membre éclairé Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Par défaut
    Entendu Mais je voudrais savoir si ptr était un int ou si c'est un :

    Merci d'avance

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par _SamSoft_ Voir le message
    Entendu Mais je voudrais savoir si ptr était un int ou si c'est un :
    Si on écrit
    forcément ptr est un pointeur et ne peut être un entier

  5. #5
    Membre éclairé Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Par défaut
    Je voulais parler de :


  6. #6
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Par défaut
    C'est un pointeur de type life.
    Bien que realloc retourne un pointeur générique de type void.

  7. #7
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Citation Envoyé par _SamSoft_ Voir le message
    Je voulais parler de :
    Alors, c'est un pointeur sur int, pas un int

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec realloc
    Par darkwall_37 dans le forum Débuter
    Réponses: 28
    Dernier message: 10/12/2009, 17h37
  2. Réponses: 4
    Dernier message: 10/03/2008, 03h59
  3. Réponses: 22
    Dernier message: 29/01/2005, 11h29
  4. Re-problème avec realloc() (désolé)
    Par Yabo dans le forum C
    Réponses: 8
    Dernier message: 30/07/2003, 22h07
  5. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo