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

C Discussion :

pointeur vers tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Par défaut pointeur vers tableau
    Bonjour à tous,

    je cherche à faire l'équivalent d'un realloc manuellement avec un tableau temporaire que j'ai appellé tabx et que j'ai remplis.
    En fait Je voudrais qu'un autre tableau (tab1) qui fait une case de moins que tabx pointe désormais vers tabx. En effet tabx est bien crée mais j'ai pas mal de fonction qui utilise un tableau qui s'appelle tab2 et pas tabx !

    J'ai essayé
    et
    Je n'ai pas d'erreur de compilation mais il ne me semble pas que cela fonctionne (segmentation fault).

    Si quelqu'un a une astuce ...

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par oneonly Voir le message
    je cherche à faire l'équivalent d'un realloc manuellement
    Impossible. Un tableau statique n'est pas modifiable en taille. Si il existe realloc(), ce n'est pas par hasard...

    Il faut apprendre à gérer la mémoire dynamique (ou se passer de la modification de la taille du tableau. Est-celle vraiment nécessaire ?)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Par défaut
    Je n'ai hélas pas le choix.

    Quand j'utilise realloc j'ai :
    *** glibc detected *** ./jeu: realloc(): invalid next size: 0x0804b408 ***
    Voici le bout de code en question :

    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
    void ffs(vache_t v1, vache_t v2,vache_t* tab2)
    {
      int c=0;
      int i;
      vache_t veau;
      vache_t* tabx;
     
                    tabx = (vache_t*)realloc(tab2,(nbv+1)*sizeof(vache_t)); 
                    tab2 = tabx;
     
     
                    tab2[nbv+1] = veau; //PLANTAGE ICI
    //Le fait que la mémoire plante ici indique que le realloc n'a pas fonctionné ...
     
                    nbv++;
    }
    nbv est une variable globale, c'est la taille de tab2.


    Est ce que je tente de faire est impossible en C ?

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par oneonly Voir le message
    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
    void reprod_vache(vache_t v1, vache_t v2,vache_t* tab2)
    {
      srand(time(NULL));
      int c=0;
      int i;
      vache_t veau;
      vache_t* tabx;
     
                    tabx = (vache_t*)realloc(tab2,(nbv+1)*sizeof(vache_t)); //PLANTAGE ICI (je pense)
                    tab2 = tabx;
     
                    veau.posu = v1.posu+1;
                    veau.posi = v2.posi-1;
                    veau.energie = (v1.energie/2) + (v2.energie/2);
                    veau.age = 0;
                    veau.alive = 1;
     
                    tab2[nbv+1] = veau;
     
                    nbv++;
    }
    Evidemment. realloc() ne fonctionne que sur des tableaux dynamiques. (alloués par malloc() ou realloc() ou calloc()).

    srand() est certainement mal placé...

    http://emmanuel-delahaye.developpez.com/notes.htm#rand

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 19
    Par défaut
    En effet srand() est un résidu d'une instruction antérieure.

    tab2 a été crée par malloc mais pas tabx car pour moi ce n'est qu'un pointeur (logique vu que realloc retourne un pointeur).
    J'ai tout de même tenté ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    tabx = (vache_t*)malloc((nbv+1)*sizeof(vache_t)); 
                    tabx = (vache_t*)realloc(tab2,(nbv+1)*sizeof(vache_t));
                    tab2 = tabx;
    sans succès. realloc ne fonctionne toujours pas, est ce que vraiment ce que je cherche à faire est possible en C ?

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par oneonly Voir le message
    tab2 a été crée par malloc mais pas tabx car pour moi ce n'est qu'un pointeur (logique vu que realloc retourne un pointeur).
    J'ai tout de même tenté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                    tabx = (vache_t*)malloc((nbv+1)*sizeof(vache_t)); 
                    tabx = (vache_t*)realloc(tab2,(nbv+1)*sizeof(vache_t));
                    tab2 = tabx;
    sans succès. realloc ne fonctionne toujours pas,
    http://emmanuel-delahaye.developpez....tes.htm#malloc
    http://emmanuel-delahaye.developpez....es.htm#realloc

Discussions similaires

  1. pointeur vers tableau
    Par corentin59 dans le forum C
    Réponses: 4
    Dernier message: 21/04/2010, 18h27
  2. pointeur vers tableau de pointeurs
    Par Michel_57 dans le forum C++
    Réponses: 6
    Dernier message: 09/11/2007, 21h41
  3. [VB.NET] Pointeur vers tableau
    Par b_lob dans le forum Windows Forms
    Réponses: 4
    Dernier message: 31/08/2006, 16h06
  4. convertion pointeur vers tableau
    Par gdpasmini dans le forum C++
    Réponses: 2
    Dernier message: 30/03/2006, 00h34
  5. Pointeur vers un tableau
    Par Nikos dans le forum C
    Réponses: 3
    Dernier message: 09/12/2002, 00h43

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