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

Dev-C++ Discussion :

sprintf dans un programme exemple


Sujet :

Dev-C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 14
    Par défaut sprintf dans un programme exemple
    Bonjour,

    Je me permet de vous soumettre une petite question d'un débutant que je suis.
    DEV C++ avec la SDL génère le code qui suit.
    Ce qui me gène, c'est le free (msg).
    Comment peut on libérer une mémoire qu'on a pas allouée ?

    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
    int main (int argc, char *argv[])
    {
        char *msg;
     
        /* Initialize SDL */
        if (SDL_Init (SDL_INIT_VIDEO) < 0)
        {
            sprintf (msg, "Couldn't initialize SDL: %s\n", SDL_GetError ());
            MessageBox (0, msg, "Error", MB_ICONHAND); 
            free (msg);
            exit (1);
        }
     
        return 0;
    }

  2. #2
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Et c'est Dev-C++ qui te génère ça ?

    Si ce code compile (ce qui serait déjà une erreur), il est clair qu'il te claquera dans les doigts à l'exécution!
    Effectivement, tu ne peux pas utiliser msg car ce pointeur est indéfini, il ne pointe vers rien. sprintf() va donc provoquer une erreur lorsqu'il voudra copier la chaîne en paramètre dans l'espace pointé par msg... qui n'existe pas!

    La question du free() ne se pose alors même pas vu que tu n'iras pas jusque là . Mais de toute façon, effectuer un free() sur un pointeur indéfini aura +/- le même effet .

  3. #3
    Membre averti
    Inscrit en
    Septembre 2008
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 29
    Par défaut
    Il faut soit transformer le char *msg en char msg[500] (Allocation statique) et dans ce cas supprimer l'appel a la fonction free().

    Ou sinon faire un jolie petit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msg =(char*)malloc(Taille*sizeof(char))
    De plus pour un soucis de debugage j'ai tendance a écrire :
    ainsi lors du debugage on voit facilement tous les pointeurs qui n'ont pas été alloué plutot que de recherché des 0xcdcdcdcd

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 14
    Par défaut
    He bien merci pour vos réponses.
    Me voilà rassuré.
    Pour être précis, il s'agit de wxDev-C++.
    Je prend note de NULL.

  5. #5
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Chargement d'une lib partagée C++ dans un programme C
    Par Zero dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 30/09/2003, 16h40
  2. commande shell dans un programme
    Par diefo dans le forum C
    Réponses: 3
    Dernier message: 15/08/2003, 13h37
  3. Réponses: 2
    Dernier message: 24/06/2003, 20h31
  4. [] Utiliser AVI d'une DLL dans mon programme
    Par seb.49 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/05/2003, 14h52
  5. [langage] Commande DOS dans un programme
    Par Jibees dans le forum Langage
    Réponses: 15
    Dernier message: 23/04/2003, 12h08

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