Partage
  • Partager sur Facebook
  • Partager sur Twitter

Violation d'accès d'écriture...

Sujet résolu
    5 octobre 2015 à 18:53:03

    Bonjour amis programmeur,

    me voici bloqué sur un simple code :

    char charString[1];
    charString[0] = lettre;
    
    for (i = 0; i <= strlen(p_text); i++)
      if (p_text[i] == '\0')
      {
        p_text[i + 1] = '\0';
        p_text[i] = charString;
      }


    Je précise que ma variable p_text est un pointeur.


    Et voici l'erreur que VC++ me donne :

    Unhandled exception at 0x00EB28C5 in SDL.exe: 0xC0000005: Access violation writing location 0x00EB78D1.

    Merci d'avance pour votre aide !

    -
    Edité par stordeurjordan 5 octobre 2015 à 18:54:23

    • Partager sur Facebook
    • Partager sur Twitter
      5 octobre 2015 à 19:08:04

      Lu'!

      Que p_text soit un pointeur d'accord. Mais :

      • est-ce qu'il contient une chaîne valide ? (pour strlen),
      • est ce que tu es sûr que tous tes "i" sont bien dans les bornes ?

      Papier + crayon.

      • Partager sur Facebook
      • Partager sur Twitter

      Posez vos questions ou discutez informatique, sur le Discord NaN | Tuto : Preuve de programmes C

        5 octobre 2015 à 19:24:19

        Salut,

        À rajouter à ce qu'a dit Ksass`Peuk :

           p_text[i] = charString;
        //  char     =   tableau    pas compatibles

        Quel intérêt à utiliser un tableau de 1 char plutôt qu'un char ?

        • Partager sur Facebook
        • Partager sur Twitter
          5 octobre 2015 à 19:43:27

          Salut,

          j'ajouterai à la liste des questions :

          - Comment est déclaré p_text ? Si c'est un pointeur vers une constante (char* p_text = "salut!"), tu ne pourras pas le modifier.

          - niveau algo, pourquoi faire une boucle alors que strlen() va te donner tout de suite ce que tu cherches ?

          int size = strlen(p_text);
          p_text[size + 1] = '\0';
          p_text[size] = charString;

          Bonne continuation.

          -
          Edité par drx 5 octobre 2015 à 19:44:48

          • Partager sur Facebook
          • Partager sur Twitter

          Bonhomme !! | Jeu de plateforme : Prototype.

            6 octobre 2015 à 21:04:59

            ksass :


            Qu'entends-tu par chaine "valide" ?


            Chaine de caractères = tableau contenant une suite de caractères terminée par un '\0'.


            char * p_text = NULL;
            p_text = '\0';



            -
            Edité par uknow 6 octobre 2015 à 21:39:27

            • Partager sur Facebook
            • Partager sur Twitter
              6 octobre 2015 à 21:31:01

              Une bonne révision chaînes de caractères/ pointeurs s'impose là. :)

              p_text = '\0';

              Tu as à gauche un pointeur sur char char*, alors qu'à droite tu as un char. Les deux se marient très mal ensemble.

              Si tu utilises un pointeur, tu dois allouer une zone mémoire avec malloc() suffisamment grande pour stocker le nombre de caractères souhaité dedans (sans oublier le '\0' final). Et une fois terminé de l'utiliser, utiliser free() pour libérer cette mémoire.

              Afin d'éviter d'écrire ce genre de vilaines choses, rajoute les options -Wall -Wextra -Werror -Wwrite-strings à ton compilateur. Une simple recherche sur le forum te dira comment faire.

              • Partager sur Facebook
              • Partager sur Twitter
                6 octobre 2015 à 21:39:29

                Dju, quel erreur de débutant... Je corrige ça et je dis quoi ;)

                Sans soucis, on va dire que c'est plus clair ^^ ok je vais vérifier si j'ai fait une gourde de ce coté là.

                -
                Edité par stordeurjordan 6 octobre 2015 à 21:40:31

                • Partager sur Facebook
                • Partager sur Twitter
                  6 octobre 2015 à 22:10:56

                  Voilà, le code fonctionne. Le problème venait du pointeur.

                  Un grand merci pour m'avoir accordé de votre temps !

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Violation d'accès d'écriture...

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown