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 :

Disparitions de valeurs dans un tableau dynamique


Sujet :

C

  1. #1
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Par défaut Disparitions de valeurs dans un tableau dynamique
    Bonjour a tous ,

    jai un ptit souci : jai cree un tableau de chaines de caracteres, je le remplis, je verifie (tout est bien dedans) mais quand je veux y acceder plus tard, y a des valeurs qui ont disparues.
    Je ne comprends pas.

    Voici le code avec le tableau keyValues.

    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
     
    char ** keyValues;
    keyValues = (char **)malloc(record.NbKeyAtt);
    printf("\n*******RELATION %s********\n",record.RelName);
    //REMPLISSAGE
    for(i=0;i<record.NbKeyAtt;i=i+1)
    {
    	char temp[100];
    	printf("enter %s\n",record.KeyAtt[i]);
    	fgets(temp,sizeof temp,stdin);
    	clean(temp);
    	keyValues[i]=(char *)malloc(sizeof(temp));
    	strcpy(keyValues[i],temp);
    	free(temp);
    	sizeValues=sizeValues+sizeof(keyValues[i]);
    }
    //REMPLISSAGE CORRECT :-)
    key=malloc(sizeof(char)+sizeof(record.RelName)+sizeof(char)+record.NbKeyAtt*sizeof(char)+sizeValues);
     
    printf("keyValues[1] : %s\n",keyValues[1]);
    //Il m'affiche bien la valeur :-)
     
    strcpy(key,getEquivalent((int)sizeof (record.RelName)));
    printf("keyValues[1] : %s\n",keyValues[1]);
    //Il m'affiche plus rien :-( => erreur de segmentation
    voici les resultats a lexecution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    keyValues[1] : bbb
    Segmentation fault
    Merci d'avance pour votre aide

  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
    euh en C les indices commencent à zéro dans les tableaux

    de plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    key=malloc(sizeof(char)+sizeof(record.RelName)+sizeof(char)+record.NbKeyAtt*sizeof(char)+sizeValues);
    est équivalent à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    key=malloc(1+sizeof(record.RelName)+1+record.NbKeyAtt*1+sizeValues);
    c'est à dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    key=malloc(sizeof(record.RelName)+2+record.NbKeyAtt+sizeValues);
    c'est bien ça ta dimension ??????*

    (et si record.RelName est un pointeur et pas un tableau, c'est même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    key=malloc(3+record.NbKeyAtt+sizeValues);

  3. #3
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Par défaut
    Merci de ta reponse.

    Oui, je sais que les indices commencent a 0, mais sachant que jai jamais de problemes avec la 1ere valeur, je n'affiche que la 2nde. D'ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("keyValues[1] : %s\n",keyValues[1]);
    Apres, je ne pense pas que cela pose probleme pour la disposition a l'interieur du malloc() ; cela revient au meme et ne resoud pas le probleme. Je prends soin expres de bien tout separer pour que mon professeur puisse comprendre a quoi servent chaque taille d'attribut.

    Pour revenir au probleme, je trouve ca bizarre que la 2eme valeur disparaisse apres execution de quelques banales instructions qui ne touchent pas au ableau...

  4. #4
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 9
    Par défaut
    C'est bon, jai resolu le pb.

    En fait, l'erreur venait de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strcpy(key,getEquivalent((int)sizeof (record.RelName)));
    et non pas du tableau.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/01/2015, 16h05
  2. Pointer sur une valeur dans un tableau dynamique
    Par raphansangy dans le forum Débuter
    Réponses: 1
    Dernier message: 27/11/2014, 14h02
  3. Réponses: 1
    Dernier message: 21/01/2008, 18h04
  4. Réponses: 6
    Dernier message: 26/12/2006, 17h01
  5. Réponses: 4
    Dernier message: 27/11/2006, 23h20

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