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 :

Problème de fou: Impossible de supprimer une variable inutilisée!


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de theclem35
    Homme Profil pro
    Technicien Réseaux & Télécommunications
    Inscrit en
    Décembre 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Réseaux & Télécommunications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 148
    Par défaut Problème de fou: Impossible de supprimer une variable inutilisée!
    Salut,

    Vous allez peut-etre me prendre pour un débile mais la, ce qui se passe me SURpasse... (^^)

    Je viens de terminer un gros projet [multithreads, api win32, SDL, sockets] et j'ai un variable qui ne me sert plus à rien.
    Comme tout le monde je tente donc de la supprimer.

    Oui sauf que lorsque je lance mon programme en ayant mis cette variable en commentaire, et bien tout plante !!

    Vous allez me dire : débile va! regarde si elle n'est pas encore utilisée.
    Sauf que non elle ne l'est pas dans aucun des 13 fichiers du projet (recherche récursive avec le compilateur et windows)

    Voici cette variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        int ContenuNiveaux[20][32][40]; // VARIABLE A SUPPRIMER
    Au départ c'était un tableau de char, je peux changer le type (la j'ai mis int) sans que ca plante. Par contre si je change le nom, ou une des dimensions, ou que je la supprimer, tout plante.

    Hallucinant, je ne comprends pas.

    Je compile avec devcpp.

    Merci!

  2. #2
    Membre émérite
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Par défaut
    tout plante.
    Un peu plus de precisions ?

  3. #3
    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
    C'est grave : il s'agit presque certainement d'un gros bug ailleurs dans le code.
    Une possibilité qui me vient à l'esprit est que tu écris dans une variable voisine en mémoire (ce qui ne signifie pas forcément voisine dans le code) et que tu dépasses la taille réservée pour cette variable. Tu écris alors dans le tableau ce qui peux ne pas avoir d'incidence apparente si tu ne t'en sers pas. Mais si tu supprimes le tableau ou réduis trop sa taille, tu peux aller écrire dans des variables utiles et les écraser.

  4. #4
    Membre confirmé Avatar de theclem35
    Homme Profil pro
    Technicien Réseaux & Télécommunications
    Inscrit en
    Décembre 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Réseaux & Télécommunications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 148
    Par défaut
    Quand je dis tout plante, en fait dans l'api win32 pas de probleme, mais lorsque j'arrive dans ma premiere fonction SDL (celle justement ou est déclaré ce tableau), et bien le programme se ferme completement sans avertissement.

    Pour ce que tu as dis diogene, je comprend mais je ne vois pas comment cela peut se produire? Chaque variable est déclarée et a donc une taille définie en mémoire, il n'y a donc pas de raison qu'elle s'écrive dans l'espace memoire reservé à mon tableau ??

    Que me conseilles tu ?

  5. #5
    Membre confirmé Avatar de theclem35
    Homme Profil pro
    Technicien Réseaux & Télécommunications
    Inscrit en
    Décembre 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Réseaux & Télécommunications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 148
    Par défaut
    En enlevant ce tableau et mettant des MessageBox placées un peu partout dans le programme j'ai vu que je faisait un SDL_Freesurface alorq que je n'avais pas encore enregistré cette surface. Ce qui me faisait planter la lib SDL et me fermait donc mon programme.

    Maintenant le programme ne se ferme plus mais il est freezé. Il doit vraisemblablement y avoir un debordement de memoire mais le taux d'occupation mémoire est stable à 12Mo, et les messagebox s'affiche peut importe où je les place dans le programme :/

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 484
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 484
    Par défaut
    Citation Envoyé par theclem35 Voir le message
    Pour ce que tu as dis diogene, je comprend mais je ne vois pas comment cela peut se produire? Chaque variable est déclarée et a donc une taille définie en mémoire, il n'y a donc pas de raison qu'elle s'écrive dans l'espace memoire reservé à mon tableau ??

    Que me conseilles tu ?
    Techniquement, si. Le C fait ce que tu lui demandes. Lorsque tu déclares un tableau tel que « int tableau [10] », le compilateur va réserver de la place pour dix int dans la pile. Maintenant, lorsque tu écris « tableau[15] = 0 », le compilateur va examiner l'adresse de début de ton tableau en mémoire, y ajouter quinze fois la taille d'un int et en déduire la position de l'élément que tu cherches à modifier. Mais il va s'en tenir là. Il ne va vérifier a priori si tu débordes de ton tableau. Et s'il le fait, cela ne prendra que la forme d'un avertissement à la compilation. Il ne t'empêchera pas de le faire.

    D'où l'intérêt de compiler avec toutes les options d'avertissement possibles, d'être sûr d'avoir compris la signification de chacun d'eux lorsqu'ils se produisent, et de les résoudre un par un jusqu'au dernier avant de lancer son programme.

    Citation Envoyé par theclem35 Voir le message
    En enlevant ce tableau et mettant des MessageBox placées un peu partout dans le programme j'ai vu que je faisait un SDL_Freesurface alorq que je n'avais pas encore enregistré cette surface. Ce qui me faisait planter la lib SDL et me fermait donc mon programme.
    Les MessageBox et/ou les printf sont une façon pratique mais néanmoins mauvaise de déboguer un programme. Étant donné que tu rencontres déjà des bugs intermittents, tu devrais d'ores et déjà prendre l'habitude d'utiliser un débogueur.

  7. #7
    Membre confirmé Avatar de theclem35
    Homme Profil pro
    Technicien Réseaux & Télécommunications
    Inscrit en
    Décembre 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Technicien Réseaux & Télécommunications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 148
    Par défaut
    Ou de changer d'IDE car apres 10minutes d'utilisation le debogueur de devcpp devient fou et fait planter tout le programme sans possibilité de sauvegarde des fichiers...

    Enfin, probleme résolu A plusieurs endroits il y avait en effet des variables que j'utilisais une premiere fois et que j'avais mis dans une structure sans les avoir auparavent initialisées...

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

Discussions similaires

  1. impossible de supprimer une image!
    Par pierrot67 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/09/2006, 15h03
  2. Supprimer une variable de SESSION
    Par kespy13 dans le forum Langage
    Réponses: 5
    Dernier message: 21/04/2006, 15h29
  3. Réponses: 29
    Dernier message: 09/02/2006, 17h11
  4. impossible de supprimer une imprimate réseau
    Par sony351 dans le forum Administration
    Réponses: 4
    Dernier message: 27/10/2005, 12h30
  5. Réponses: 2
    Dernier message: 14/05/2004, 14h32

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