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

Langage C++ Discussion :

Probleme tableau de string


Sujet :

Langage C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Points : 54
    Points
    54
    Par défaut Probleme tableau de string
    Bonjour,

    Ça fait un bon moment que je ne comprends pas mon erreur. J'ai essayé différentes méthodes, mais toutes aboutissent au même résultat. Je pense que c'est un problème d'adressage. Pour ça que j'utilise la méthode "append" qui est censée faire une copie, mais toujours le même résultat.

    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
     
    wstring monTableau[MAX_DEVICE];
     
    /* *** */
     
    do {
     
    /* *** */
     
       monTableau[index].append(uneChaine);
       MessageBox( 0, (LPCWSTR)monTableau[index].c_str(), L"Debug", 0 );
     
    /* *** */
     
    }while();
     
    MessageBox( 0, (LPCWSTR)monTableau[index].c_str(), L"Debug", 0 );
    Je trie un fichier dans mon do while, puis je veux stoker des infos dans un tableau de string.

    Comme ça ne marchait pas j'ai décidé de regarder le contenu de mes strings avec des MessageBox.

    La première affiche ce qu'il me faut, tandis que la deuxième affiche une chaine vide ( rien ).

    Voici la déclaration de uneChaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TCHAR uneChaine[1024];
    Merci pour votre aide.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 906
    Points : 220 164
    Points
    220 164
    Billets dans le blog
    126
    Par défaut
    Bonjour,

    Vu ce que j'ai compris, le problème ne viendrait t'il pas du traitement du fichier dans le do/while.
    Pour verifier si c'est le 'append' qui ne fonctionne pas, il faut afficher la chaine de base et la chaine que vous voulez ajouter, mais il semblerai que la chaine à ajouter soit vide ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    Merci pour votre aide.

    Je ne pense pas que le problème vienne du append, puisque la première MessageBox fonctionne et m'affiche le texte correctement.

    Je pense que le traitement du fichier est correct.

    C'est au niveau des chaines de caractères et pointeurs sur chaines de caractères que ça bloque.

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    En toute logique, j'aurais tendance à me poser des questions sur l'évolution de index...

    Si, dans la boucle, index est régulièrement modifié (ne serait-ce que incrémenté), il semble cohérent de se dire que, après la dernière exécution de la boucle, sa valeur soit celle... de la chaine qui suit la dernière chaine sur laquelle tu as travaillé

    Ici, il manque toutes les information de gestion de cette variable pour pouvoir en dire plus

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    Merci pour votre réponse, en effet il y avait un problème à ce niveau. Une bête erreur d'inattention de ma part.

    Cependant un problème persiste.

    Je suis incapable ( à mon grand regret ) de renvoyer un pointeur sur un tableau de string.

    Voici ma fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    int maFonction( wstring *monTableau1[100], wstring *monTableau2[100] );
    Mais j'ai l'impression que ça me fait un tableau de pointeur de wstring, au lieu d'un pointeur sur tableau de wstring.

    Mon but c'est de récupérer deux tableaux de wstring ( string en unicode ). Donc je ne peux pas utiliser le return, d'où le passage de pointeur en paramètre.

    Mais je dois mal m'y prendre, l'application plante. ( Sans doute problème d'adressage... )

  6. #6
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Il manque des parenthèses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int maFonction( wstring (*monTableau1)[100], wstring (*monTableau2)[100] );

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    Merci pour votre réponse, ça m'aide.

    Cependant, je requiert votre aide une fois de plus.

    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
     
    int maFonction( wstring (*monTableau1)[100], wstring (*monTableau2)[100] ) {
     
    /* *** */
     
       do {
     
       /* *** */
     
          (*monTableau)[index].append(uneChaine); // Cette ligne plante le programme.
     
       /* *** */
     
       }while();
     
    /* *** */
     
    }
    Comme dis dans le commentaire, le programme plante sur le append. J'y comprends plus rien...

  8. #8
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Plusieurs possibilités quant à la source du problème :

    - le tableau n'est pas alloué et donc c'est le déréférencement qui plante :
    - le tableau est alloué mais l'index est en dehors :
    - le tableau est alloué, l'index valide mais pas l'élément à cet index :

    Debug le code avec un debugger ou bien utilise des variables temporaires pour mettre en évidence l'étape qui pose problème.

  9. #9
    Alp
    Alp est déconnecté
    Expert éminent sénior

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Points : 11 861
    Points
    11 861
    Par défaut
    Par ailleurs, je te conseille de lire les Guru of the Week qui te sensibiliseront (et même bien plus) aux problématiques de niveau intermédiaire en C++, souvent avec un avis sur ce qu'il vaut mieux faire et ce qu'il faut éviter, etc.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    Merci pour les conseils.

    Comment je me débrouille avec les variables temporaires?

    Il est possible que ca vienne de l'index, parce que quand je visualise le résultat à la MessageBox, je parcours mon tableau, cela m'affiche n'importe quoi ( impression qu'on pointe au hasard dans la mémoire ). Puis ça finis par planter ( logique à force de pointeur n'importe où on tombe sur de segmentation fault ).

    Mais je comprends pas pourquoi l'index serait mauvais.

  11. #11
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Les variables temporaires c'est juste pour le debug, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    tmp1 = *monTableau
    cout << "passed 1" << endl;
    tmp2 = tmp1[index]
    cout << "passed 2" << endl;
    tmp3 = tmp2.append(uneChaine);
    cout << "passed 3" << endl;

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    Merci beaucoup pour cette aide.

    Je vais essayer de me débrouiller avec tout ça et je tiens au courant du résultat.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    J'ai donc testé cette méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    tmp1 = *monTableau
    cout << "passed 1" << endl;
    tmp2 = tmp1[index]
    cout << "passed 2" << endl;
    tmp3 = tmp2.append(uneChaine);
    cout << "passed 3" << endl;
    Et comme je le présentais, le problème viens de la deuxième ligne donc de l'index.

    Comment dois je rectifier mon code? Désolé je suis encore un peu dans le brouillard sur ce type de problème.

  14. #14
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Vraisemblablement un dépassement de l'index maximal du tableau mais il faudrait plus de code pour déterminer précisément l'origine du problème.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 82
    Points : 54
    Points
    54
    Par défaut
    Ok, je posterai plus de code.

    Mais je ne comprends pas comment je peux dépasser, sachant que ça plante au premier index. ( index = 0 ).

  16. #16
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    Dans ce cas c'est que le tableau est pas ou mal alloué.

Discussions similaires

  1. Probleme avec un public array/tableau de strings
    Par Nico820 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/07/2011, 12h04
  2. probleme creation tableau de string
    Par redox13 dans le forum MATLAB
    Réponses: 3
    Dernier message: 24/04/2009, 09h19
  3. Probleme d'initialisation d'un tableau de String
    Par kodo dans le forum Struts 1
    Réponses: 3
    Dernier message: 04/04/2008, 11h28
  4. [Collections] Conversion de Vector en tableau de String
    Par java_math dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 06/06/2004, 12h55
  5. [Collections] Tableau de String
    Par gexti dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 02/06/2004, 15h42

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