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 :

"access violation reading location"


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 204
    Par défaut "access violation reading location"
    Bonjours à tous,


    Avec le code que voici, j'ai une erreur d'access violation:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
      const char *param;
    	char *word;
    	char* argv[5];
    	int argc;
    	int i;
    	int count;
     
    	char *pc = NULL;
     
    	 param = "-toto";
     
    	for(word = strtok(param, " "), i=0;
    		word != NULL;
    		word = strtok(NULL, " "), i++)
    	{
    		argv[i] = word;
    	}
     
    	argc = i;
     
       for (count = 0; count < argc; count++) {
     
     if (strcmp(argv[count], "-toto") == 0) {
     
             pc = "";
             if ((count + 1) < argc) {
     
                   if (*argv[count + 1] != '-') {
     
                        pc = argv[++count];
                        }
                    }
     
     
                }				
    }


    à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     if (*argv[count + 1] != '-')
    je ne sais pas comment y remedier

  2. #2
    Membre très actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Par défaut
    Je ne sais pas ce que ton programme fait mais je crois que le problème vient de la fonction strtok. Jusqu'à combien <i>i</i> est incrémenté? Veille à ce qu'il ne dépasse pas 5-1, parce que tu demande l'accès à argv[count+1]..

  3. #3
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    Hummm :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char *pc = NULL;
    ...
    pc = "";
    c'est pas beau !!! (même si ca ne plante pas chez moi sous Visual)

    dans ton titre, il n'y aurait pas une suite style : access violation reading location 0x..... ?

    [edit] dré kam, bonne analyse.

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 204
    Par défaut
    Pour simplifier chez mis en dur param = "-toto", mais sa peut très bien être param ="toto -titi" ou param= "toto titi"

    ensuite avec strtok, je veux mettre dans chaque case les arguments, exemple:
    argv[o] = toto, argv[] = titi.

    à la fin parser tout ca.

    Je n'aurai jamais à dépasser 5.

  5. #5
    Membre très actif
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2011
    Messages : 247
    Par défaut
    Alors ça vient peut-être de tes mallocs dans la fonction strtok.

  6. #6
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    "access violation reading location" c'est du langage Windows ca, non ?

    Tu développes avec quel outil ?

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2009
    Messages
    204
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 204
    Par défaut
    C'est visual studio

  8. #8
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Il me semble qu'il y a peu, on avait déjà évoqué ce genre d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      const char *param;
    .... 
    	 param = "-toto";
     
    	for(word = strtok(param, " "), i=0;.....
    param pointe sur une chaine non modifiable. Or strtok() doit pouvoir modifier la chaine qu'il manipule

    Il faut un schéma du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      char param[] = "-toto" ;
    .... 
    	for(word = strtok(param, " "), i=0;.....

Discussions similaires

  1. [OCILIB] OCI_LobRead erreur Access violation writing location
    Par capic dans le forum Interfaces de programmation
    Réponses: 3
    Dernier message: 05/12/2011, 08h52
  2. Access violation reading
    Par rXpCH dans le forum C++
    Réponses: 6
    Dernier message: 22/06/2011, 12h07
  3. Réponses: 6
    Dernier message: 15/05/2009, 14h07
  4. [débutant]Access violation reading location
    Par gate35 dans le forum C++
    Réponses: 6
    Dernier message: 13/05/2009, 14h32
  5. Access violation writing location 0x00000010.
    Par dhoorens dans le forum C++
    Réponses: 6
    Dernier message: 29/12/2006, 11h23

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