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 :

Allocation tableau 2D de Char *


Sujet :

C

Vue hybride

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

    Informations forums :
    Inscription : Février 2007
    Messages : 26
    Par défaut Allocation tableau 2D de Char *
    Bonjour,

    J'utilise dans mon code un tableau comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	char * TabParametre[3][11];
    Le problème c'est que quand je le remplis au bout d'un moment les valeurs déjà rempli change pour prendre des valeurs quelconques. Il faut donc (je pense) faire une allocation pour pas qu'il aille prendre une valeur n'importe ou en mémoire.

    Le problème c'est que je ne sais pas trop comment faire un malloc la dessus.
    J'ai essayé ça, mais ça ne marche pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	TabParametre = ((char *)**)malloc(3 * sizeof(char *));
    	for (k = 0; k < 3 ; ++k)
    		TabParametre[k] = ((char *) *) malloc(sizeof(char *) * 11);
    Merci de votre aide
    Bonne journée

  2. #2
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Dans votre tableau, il y a la place pour 3*11=33 pointeurs sur char. La place est déjà allouée, pas besoin de malloc(). Pourriez-vous être plus précis sur le problème que vous rencontrez?

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

    Informations forums :
    Inscription : Février 2007
    Messages : 26
    Par défaut
    Citation Envoyé par stephl
    Dans votre tableau, il y a la place pour 3*11=33 pointeurs sur char. La place est déjà allouée, pas besoin de malloc(). Pourriez-vous être plus précis sur le problème que vous rencontrez?
    Merci pour cette réponse, je me rapelle maintenant que l'allocation c'est quand on fait du int ** tab et que le nombre de ligne et de colonne n'est pas déclarer.

    Mon problème risque d'être difficile a comprendre.

    J'utilise la librairie libxml2 et plus précisément la partie XMLreader pour parcourir un fichier XML et recupérer des données.

    Mon code qui pose problème est le suivant :

    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
     
    	for(i=0;i<3;i++){
    		ret = xmlTextReaderRead(reader);
    		ret = xmlTextReaderRead(reader);
    		ret = xmlTextReaderRead(reader);
    		name = xmlTextReaderConstName(reader);
    		for(j=0;j<11;j++){
    		value = xmlTextReaderConstValue(reader);
    		TabParametre[i][j] = value;
    		ret = xmlTextReaderRead(reader);
    		ret = xmlTextReaderRead(reader);
    		ret = xmlTextReaderRead(reader);
    		ret = xmlTextReaderRead(reader);
    		ret = xmlTextReaderRead(reader);
    		ret = xmlTextReaderRead(reader);
    		name = xmlTextReaderConstName(reader);
    		}
    		ret = xmlTextReaderRead(reader);
    		ret = xmlTextReaderRead(reader);
    		name = xmlTextReaderConstName(reader);
    	}
    ret = xmlTextReaderRead(reader); permet de passer a la balise suivante et name = xmlTextReaderConstName(reader); de récuperer son nom.

    Avec value = xmlTextReaderConstValue(reader);
    TabParametre[i][j] = value;

    Je récupére l'attribut et le mets dans le tableau 2D.
    La récupération marche niquel sauf que quand je débug :

    Il trouve le premier paramétre (Nom) le met dans TabParametre[0][0]
    Trouve la second paramétre (Rang) le met dans TabParametre[0][1]
    (Jusque la tout va bien
    Puis trouve le 3éme paramétre (RangePrécédent) le met dans TabParametre[0][2] (C normale) mais change les valeurs de TabParametre[0][0] en "s31" et TabParametre[0][1] en "à5carré" etc...

    Sachant que s31 c'est une valeur qui a été en mémoire a un moment donné dans mon programme avant ...

    Je sais que ce n'est pas très clair. Si vous voulez plus de précision, n'hésité pas.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 26
    Par défaut
    J'ai l'impression que c'est la valeur de value qui change également pendant les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		ret = xmlTextReaderRead(reader);
    		ret = xmlTextReaderRead(reader);
    		ret = xmlTextReaderRead(reader);
    		name = xmlTextReaderConstName(reader);
    la déclaration est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    const xmlChar *value;

  5. #5
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Que retourne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlTextReaderConstValue(reader)
    ?

    Et
    , est-ce la même chose que char?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 26
    Par défaut
    Ce que retourne exactement value = xmlTextReaderConstValue(reader) est 0x00b15784 traduit par "Nom" dans Visual Studio 2005.

    XmlChar n'est pas exactement un char mais un type défini dans libxml2 :

    http://www.xmlsoft.org/APIfunctions.html

    Je ne peut pas par exemple le comparer avec un char * classiquement mais de la façon suivante : xmlStrcmp(name,"Column")

  7. #7
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par Votre lien
    The result will be deallocated on the next Read() operation.
    Je ne suis pas familier de ces fonctions, je peux donc me tromper. Néanmoins, il me semble qu'il vous faut copier la chaîne de caractères retournée dans un autre buffer, et non vous contenter de conserver le pointeur vers cette chaîne qui sera sûrement écrasée par des appels suivants aux fonctions xml...(). Utilisez quelque chose comme strcpy().

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

Discussions similaires

  1. Alloc dynamique d'un char[]
    Par Chop_chop dans le forum C++
    Réponses: 7
    Dernier message: 12/07/2007, 11h24
  2. Probleme allocation tableau multidimensions
    Par orj30754 dans le forum C
    Réponses: 15
    Dernier message: 27/12/2006, 15h13
  3. [Debutant]Tableau de pointeur char (char *)
    Par nephhh dans le forum Débuter
    Réponses: 8
    Dernier message: 03/11/2006, 00h48
  4. allocation tableau 3 dimensions
    Par le mauvais dans le forum C++
    Réponses: 7
    Dernier message: 16/06/2006, 19h55
  5. allocation de memoire pour char**
    Par Guillaume602 dans le forum C++
    Réponses: 3
    Dernier message: 03/04/2006, 20h01

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