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 :

probleme tableau de char *


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut probleme tableau de char *
    Bonjour,
    voila j'ai un soucis. Ddans une fonction d'initialisation je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *tabTmp[] = {"blabla","cucu"};
    tabV = tabTmp;
    ou tabV est un char** en variable globale.

    quand je suis dans une autre fonction il semblerai que mon tabV ne pointe plus vers rien... lorsque je fais :

    le programme plante.

    Pourtant dans tabV je retient l'adresse du tableau crée par tabTmp et la sortie de la fonction seule le pointeur tabTmp est supprimé non?
    le pire c'est que dans certain cas le programme ne plante pas....
    avez vous une idée?

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Je soupçonne que ta variable globale (au passage, c'est mal une variable globale) est initialisée avec une variable locale de fonction mais tu n'as pas montré assez de code pour en être sûr.

    Plus de code s'il te plait ?
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    merci pour la reponse.

    Et bien je l'ai mis dans le premier code les lignes d'initialisations.

    ma variable globale prend juste l'adresse du tableau crée localement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char *tabTmp[] = {"blabla","cucu"};
    tabV = tabTmp;
    edit : apparement le tableau est supprimer a la sortie de la fonction. Ce qui me semble bizzard c'est que défois sa marche donc il n'est pas supprimé. Bref j'ai fait une boucle pour affecter dans ma variable globale les cha* de l'autre tableau et la sa marche

    merci

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Quand je disais plus de code, c'est le code de la fonction que je voulais.

    Apparement, ta variable globale est initialisée avec une variable locale dans une fonction. Lorsque tu quittes ta fonction, cette variable locale n'existe plus et donc ta variable globale se retrouve avec n'importe quoi dedans.

    Il va falloir modifier le comportement de cette fonction et probablement utiliser une allocation dynamique avec malloc().

    De temps en temps cela marche, c'est de la chance et c'est le principe même des fonctionnements indéterminés. Des fois, cela marche, des fois, cela crashe.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    oui merci, j'avais oublier que lorsque on declare un tableau sans allocation dynamique il etit supprimé a la sortie de la fonction. J'ai fais quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    tabV = (char*)malloc(90*sizeof(char));
    for(i = 0; i < 90; i++){
    tabV[i] = tabTmp[i]
    }
    tu me confirme que c'est juste? parce que pour l'instant sa marche bien

  6. #6
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par nightwar Voir le message
    tu me confirme que c'est juste? parce que pour l'instant sa marche bien
    Non, c'est pas bon

    tabV est un tableau de pointeur de caractères donc un char **

    Cela veut dire que tu réserve 90 chaines de caractères. Pourquoi pas mais un define serai mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define MAX_SIZE_ARRAY 90
    char **tabV = (char**)malloc(MAX_SIZE_ARRAY*sizeof(char **));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(i = 0; i < MAX_SIZE_ARRAY; i++){
    tabV[i] = tabTmp[i]
    }
    C'est bon, mais il faut être sûr que tabTmp aie bien 90 elements, sinon, c'est le crash, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char *tabTmp[MAX_SIZE_ARRAY] = {"blabla","cucu"};
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

Discussions similaires

  1. Probleme avec tableau de char
    Par loula427 dans le forum Débuter
    Réponses: 24
    Dernier message: 25/01/2011, 11h56
  2. probleme tableau de char au hasard
    Par Asmod_D dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 26/07/2007, 21h49
  3. [C++] Probleme tableau
    Par yanndublanche dans le forum C++
    Réponses: 9
    Dernier message: 21/10/2004, 16h42
  4. Adresse d'un tableau de char
    Par Trap D dans le forum C
    Réponses: 8
    Dernier message: 23/12/2003, 12h02
  5. Réponses: 4
    Dernier message: 10/10/2003, 18h04

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