Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur de malloc?

    26 juillet 2006 à 14:01:01

    Salut à tous,
    J'ai créé une fonction qui me retourne un pointeur vers une plage de mémoire contenant une chaine de caractères (une fonction de type char*).
    Elle me donne le résultat attendu lorsque je l'utilise en console.

    Mais dès que je me mets à la SDL... o_O
    *** glibc detected *** malloc(): memory corruption: 0x08066720 ***
    Ou alors ce message ne s'affiche pas, mais ma chaine contient des caractères bizarres... Et ce en affichant une fenêtre de base SDL et utilisant une fonction qui fonctionne prfaiteemnt en console!

    Pour ceux qui voudraient du code...
    int main(int argc, char* argv[])
    {
            SDL_Init(SDL_INIT_VIDEO);
     
            srand(time(NULL));
            char *essai = NULL;

            int quitter = 0;
            SDL_Surface *screen = NULL;
            SDL_Event event;
           
            screen = SDL_SetVideoMode(LARGEUR, HAUTEUR, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);

            while(!quitter)
            {
                    SDL_WaitEvent(&event);
                    switch(event.type)
                    {
                            case SDL_QUIT:
                                    essai = generer();
                                    printf("Phrase: %s\n", essai);
                                    quitter = 1;
                                    break;
                            default: break;
                    }
                    SDL_FillRect(screen, NULL, SDL_MapRGB(screen->format, 255, 255, 255));
                    SDL_Flip(screen);
            }
            SDL_Quit();
           
            return EXIT_SUCCESS;
    }


    Quelqu'un saurait ce qui peut causer ce malloc: memory corruption lorsque j'utilise la SDL?

    Merci!
    • Partager sur Facebook
    • Partager sur Twitter
      26 juillet 2006 à 14:03:26

      Et si tu nous affichait ta fonction generer() hmmm ?
      • Partager sur Facebook
      • Partager sur Twitter
        26 juillet 2006 à 14:17:08

        Elle marche... si je fais mon printf avant SDL_Init, ma phrase est normale!
        Après SDL_Init... Elle contient des caractères bizarres.

        En plus generer fait 70 lignes et elle ne sert à rien si je n'affiche pas les 8 autres fichiers qui font en moyenne 100 lignes lol

        Sinon pas de malloc(): memory corruption: c'était juste du à des mallocs trop petits.
        • Partager sur Facebook
        • Partager sur Twitter
          27 juillet 2006 à 11:44:11

          petit up??

          Après d'autres essais,
          char *essai = NULL;
          essai = generer();
          printf("Phrase: %s\n", essai); //correct
                 
          SDL_Init(SDL_INIT_VIDEO);
          printf("Phrase: %s\n", essai); //correct
          essai = generer();
          printf("Phrase: %s\n", essai); //illisible...


          Donc ma fonction generer() ne marche pas après un SDL_Init???
          • Partager sur Facebook
          • Partager sur Twitter
            27 juillet 2006 à 11:59:45

            Je suppose que generer() est un appel à un malloc, à une allocation dynamique. Dans ce cas, tu alloue de la place en mémoire pour une variable déjà présente en mémoire... sans la réinitialiser à NULL et appel à free. Ce qui n'est pas correct. Eclaire nous quant au contenu exact de la fonction generer().
            • Partager sur Facebook
            • Partager sur Twitter
              27 juillet 2006 à 13:03:49

              Arf, exact j'avais oublié free() avant de réallouer dans mon exemple. Mais ca change rien...

              char* generer()
              {
                      char *retour = NULL;
                      retour = malloc(400 * sizeof(char));
                      if(retour == NULL)
                              exit(EXIT_FAILURE);
              //du code, des strcat pour generer la phrase
                     
                      return retour;
              }


              Ca devrait être correct..
              Ce que je ne comprends pas c'est que ca marche si je ne mets pas de SDL_Init()!

              En tous cas merci de m'aider ;)
              • Partager sur Facebook
              • Partager sur Twitter

              Erreur de malloc?

              × 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