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

Windows Forms Discussion :

Problématique étrange de variables locales


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 10
    Par défaut Problématique étrange de variables locales
    Je vous expose l'os sur le quel je suis tombé ce matin :

    J'avais crée une méthode statique dans une classe et il fallait que je rajoute un bout de code dedans, rien de bien méchant, 8 lignes en plus, en dehors de toute boucle ou condition.

    je rajoute donc mon petit bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1: float Qty_Total = (float)Qty_Mat + (float)Qty_Diff + (float)Qty_Abs;
     
    2:			float Perc_Diff = 0f;
    3:			float Perc_Abs = 0f;
    4:			if(Qty_Total > 0f)
    5:			{
    6:				Perc_Diff = (float)Qty_Diff / Qty_Total;
    7:				Perc_Abs = (float)Qty_Abs / Qty_Total;
    8:			}
    Et je teste ma fonction et là, oh surprise, en pas à pas, VS saute complètement les lignes 2 et 3 ainsi donc que les 6 et 7. Renommer les variables ou changer leur types ne règle en rien le problème et je ne peux d'ailleurs plus rajouter de nouvelles variables dans la méthode quel que soit leur type ou leur position car elles sont traitées de la même façon...ou plutôt ne sont pas traitées justement.

    Pourtant Visual Studio râle si je supprime les déclarations de ces variables(logique en soit mais pour autant il ne les "voit" pas pendant l'exécution :S ). De plus, un point d'arrêt sur les lignes 2 et/ou 3 sera automatiquement décalé sur la ligne 4, comme si elle n'existaient pas.

    Je fais alors quelques tests. suppression des lignes 2 à 8 : la ligne 1 rencontre alors le même problème que les lignes 2 et 3 précédemment; Inconnue au bataillon lors de l'exécution.
    Problème qui ne se pose pas si on laisse en place seulement les lignes 4,5 et 8 de la condition

    Après quelques essais divers et variés, j'en viens finalement à tester ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1: float Qty_Total = (float)Qty_Mat + (float)Qty_Diff + (float)Qty_Abs;
     
    2:			float Perc_Diff = 0f;
    3:			float Perc_Abs = 0f;
    4:			if(Qty_Total > 0f && Perc_Diff == 0f && Perc_Abs == 0f)
    5:			{
    6:				Perc_Diff = (float)Qty_Diff / Qty_Total;
    7:				Perc_Abs = (float)Qty_Abs / Qty_Total;
    8:			}
    Qui "règle" mon problème car toutes les variables sont alors bien prises en compte. Cela dit, je ne peut toujours pas créer de nouvelles variables locales :S

    Si quelqu'un m'a compris (même moi j'ai du mal à expliquer ce phénomène) et qu'il a déjà rencontré ce genre de problème, mais surtout s'il à une explication, je suis prenneur car c'est vraiment handicapant.

  2. #2
    Membre éclairé Avatar de grrrkewel
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 72
    Par défaut
    Salut,
    Ce genre de problème m'est déjà arrivé en C/C++ sous Linux, des bouts de code complètement ignorés par le compilateur et donc le programme mais sous VS, jamais...
    As-tu cependant essayé des tests genre msgbox(Perc_Diff) par ex; dans mon cas à l'époque un "printf" avait aidé...
    Je ne fais pas vraiment avancer le "shmilblik", mais bon

  3. #3
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    ca arrive parfois parce qu'on croit débugguer un code, et en fait, le debuggueur affiche le code source d'un autre fichier

    J'sais pas si c'est cela, mais ca m'est déja arrivé en C++ avec Visual Studio...

    The Monz, Toulouse

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Essayer de nettoyer et recompiler ton projet

  5. #5
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    moi ca m'arrive quand j'ai des pointeurs qui ne pointent plus sur la bonne zone (même en C#), le compilateur "zappe" des zones ou se téléporte dans d'autres zones qui n'ont rien à voir.
    Dans ces cas-là, le nettoyage, re-compilation du projet n'y change rien, il faut trouver le code qui engendre le problème de pointage mémoire. Et c'est pas toujours évident car aucune exception n'est lancée, on ne s'en rend compte que parceque le compilateur fait n'importe quoi.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 10
    Par défaut
    @grrrkewel, impossible d'utiliser la variable, un espion ne le trouve pas comme si elle n'existait pas, idem pour le reste. Inconnue au bataillon...tout en étant quand même là (car on ne peut pas supprimer la déclaration)

    @tomlev, déjà fait, nettoyé, généré, régénéré, redémarré VS (et la machine aussi au cas où) rien n'y fait.

    Même envoyé sur le serveur svn et mis à jour sur une autre machine le problème est également présent.

  7. #7
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    vérifier les références en debug ainsi qu'en release
    et générer la solution

    vs débug des dll et ensuite fait la liaison avec le code source, il pointe donc vers des dll qui ne correspondent pas à votre code
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

Discussions similaires

  1. text, ntext et image sont interdits dans les variables locales
    Par Sebounet19 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 04/07/2013, 15h44
  2. Réponses: 3
    Dernier message: 02/03/2006, 19h22
  3. [MFC] Globaliser une variable locale
    Par Philippe320 dans le forum MFC
    Réponses: 3
    Dernier message: 01/12/2005, 20h12
  4. variables locales ou globales?
    Par molesqualeux dans le forum C
    Réponses: 20
    Dernier message: 09/11/2005, 23h03
  5. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 08h22

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