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 :

Non initialisation de variables (sans erreurs de compilation)


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Non initialisation de variables (sans erreurs de compilation)
    Bonjour,

    désolé de vous embêter mais je vous expose un petit souci :

    Dans mon code j'ai des déclaration de ArrayList :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ArrayList AL1 = new ArrayList();
    ArrayList AL2 = new ArrayList();
    ArrayList AL3 = new ArrayList();
    Jusque là, rien de bien compliqué.
    Puis j'ai une condition et en cas de réussite mes méthode de récupération de données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    AL1 = data.getAL1(p1, p2);               
    AL2 = data.getAL2(p1, p2);               
    AL3 = data.getAL3(p1, p2);
    Toujours rien de spécial mais, lorsque que j'exécute le programme, je m'aperçois que AL2 et AL3 n'existent pas (sachant que je passe bien dans les fontion getALX() et que ce qu'elles me renvoient est bien cohérent).
    Pas juste un null, non pire : les variables ne s'instancient pas.
    Donc mode débug, et après mes "new ArrayList()", Visual Studio me balance que la variable n'existe pas dans le contexte actuel, ce qui ne l'empêche pas de continuer à s'exécuter sans me renvoyer d'erreur...

    Auriez-vous, par hasard, déjà rencontré ce problème ?

    Merci beaucoup

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Points : 709
    Points
    709
    Par défaut
    On dirait un problème de portée de tes variables.
    Tu as des blocs conditionnels (if, while...) ou des blocs de gestion d'exception (try / catch) ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Ben en fait, 90% de mon projet se base sur de la manipulation d'ArrayList. Donc si ça m'était arrivé au début je me serais posé des question, mais là j'en suis à 15 jours de dév donc ça m'étonne d'avoir un souci de portée :

    Pour faire plus simple, voici le vrai code (enfin juste la partie incriminé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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    /* la série des ArrayList */
    ArrayList listeDateC = new ArrayList();
    ArrayList listePPage = new ArrayList();
    ArrayList listePPosition = new ArrayList();
    ArrayList listeGroupeA = new ArrayList();
    ArrayList listeGroupeB = new ArrayList();
    ArrayList listeMC = new ArrayList();
     
     
     
    /**** là dedans, tout est OK ***/
    // insertion des DI
    if (checkBox_di.Checked && listeDate.Contains(this.selectedDate))
    {
    xls.insertDI(data.getIndexData(idSite, this.selectedDatets));
    this.ligneVide(3);
    }
    /******************/
     
     
     
    // insertion de l'évolution
    if (checkBox_evoPosition.Checked && listeDate.Contains(this.selectedDate))
    {
     
    listeDateC = data.getDateControleEvo(idSite, this.selectedDatets);               
     
    listePPage = data.getEvoPositionPPage(listeDateC, dateDC, listeMoteur, idSite);
    listePPosition = data.getEvoPositionPPosition(listeDateC, dateDC, listeMoteur, idSite);
    listeGroupeA = data.getEvoPositionGroupeA(listeDateC, dateDC, listeMoteur, idSite);
    listeGroupeB = data.getEvoPositionGroupeB(listeDateC, dateDC, listeMoteur, idSite);
    listeMC = data.getEvoMCPositionnes(listeDateC, dateDC, listeMoteur, idSite);
     
    this.ligneVide(3);
    }
    Et dans tout ça, seul listeDateC s'initialise via le 'new' et se remplie.

    Les data.getEvo... s'exécute puisque le débuggeur rentre dedans sans me faire d'erreurs mais les 5 autres ArrayList reste toujours inconnues.

    Si ça peut vous aiguiller

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Points : 709
    Points
    709
    Par défaut
    Une question bête : dans tes data.getEvoXXX, tu instancies un nouvel ArrayList que tu renvoies ensuite ?
    Même si ce n'est pas "faux", il est préférable de passer tes listeXXX en paramètre des méthodes (par référence) et de travailler directement dessus, c'est mieux pour la mémoire

    Et à mon avis, le problème vient vraiment de tes méthodes... il y a probablement un souci quand elle font leur return.

  5. #5
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Citation Envoyé par alband85 Voir le message
    Même si ce n'est pas "faux", il est préférable de passer tes listeXXX en paramètre des méthodes (par référence) et de travailler directement dessus, c'est mieux pour la mémoire
    Ceci n'a absolument aucun impact sur la mémoire. Le garbage collector trace les références sur les objets, peu importe à quel endroit est créée la référence.
    Les références et les objets sont des éléments totalement distincts.

    De plus, tous les types référence sont automatiquement passés par référence.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    difficile de passer les liste en paramètre vu que ce n'est pas la même classe. Mais ça encore c'est un détail.
    Pour ce qui est du return, j'ai testé les 6 (date + les autres), pour chaque return des trucs qui ne vont pas, j'ai bien une ArrayList de 10 éléments.

    Je met en pièce jointe un screenshot de VS avec un point d'arrêt sur l'initialisation de la 3ème ArrayList et des espion sur les 2 premières.

    Comme tu peux le voir, il y a qd même un truc étrange, pour ne pas dire bizarre ou carrément louche
    Images attachées Images attachées  

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Salut,

    tu compiles bien en Debug et sans optimisation ? Ce "probleme" peut arriver suite à des optimisations ou autres inlining de fonction.

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    rien de spécial au niveau de la compilation. Si ce n'est que j'ai fait un import d'un projet VS 2005.
    Par contre je suis en Release.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    ok, je retourne me cacher, en compilant en Debug ça tourne...

    Par contre, je ne vois absolument pas pourquoi ça bloquait de l'autre côté

    Merci à tous

  10. #10
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Juste comme ça, tu as pensé à utiliser autre chose que des ArrayList ? Genre des List<T> non ? Les ArrayList c'est un peu pourri quand même.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Sincèrement non,
    j'ai ce truc à finir pour avant que je le commence (sachant que si j'avais du attendre une validation ça ne serait pas encore démarré...) et tout ce que j'avais sous la main c'était des ArrayList.
    Peut-être que je réécrirai mes classe un jour où j'aurais le temps

  12. #12
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Points : 709
    Points
    709
    Par défaut
    Les Generics, tu les avais sous la main aussi
    (juste pour info http://blogs.msdn.com/joshwil/archiv...13/112598.aspx)

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Citation Envoyé par Skyounet Voir le message
    Juste comme ça, tu as pensé à utiliser autre chose que des ArrayList ? Genre des List<T> non ? Les ArrayList c'est un peu pourri quand même.
    Je plussoie !

    Pour le probleme, tu ne peux pas compter sur un code en release dans un debugger (le compilateur C# bien que faisant tres peu d'optimisation de lui meme, pourrait te cracher un IL totalement different de ta source, et de fait créer ces variables qu'on ne peut pas interroger).

  14. #14
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par alband85 Voir le message
    Les Generics, tu les avais sous la main aussi
    (juste pour info http://blogs.msdn.com/joshwil/archiv...13/112598.aspx)
    OK, merci pour le lien, je m'y plonge


    @SirJulio : d'accord, je comprend mieux. Je reste en debug jusqu'à la fin. Ce sera plus sûr

  15. #15
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2006
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juin 2006
    Messages : 645
    Points : 709
    Points
    709
    Par défaut
    Citation Envoyé par Bungle Voir le message
    @SirJulio : d'accord, je comprend mieux. Je reste en debug jusqu'à la fin. Ce sera plus sûr
    Ben non c'est pas plus sûr... puisque le jour où tu passeras en release, tout risque de se bananer méchamment

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/05/2015, 20h21
  2. Comment verifier variable sans erreur ?
    Par F.Salenko dans le forum Langage
    Réponses: 11
    Dernier message: 01/07/2013, 09h43
  3. Non initialisation de variable membres
    Par MoonDragon dans le forum C++/CLI
    Réponses: 0
    Dernier message: 11/02/2012, 12h19
  4. erreur de compilation variable non defini
    Par nabelou1 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/01/2009, 16h43
  5. erreurs de variables non initialisées
    Par setsuko974 dans le forum Langage
    Réponses: 4
    Dernier message: 15/02/2007, 09h26

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