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

Langage Java Discussion :

Problème de gestion de la mémoire


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Problème de gestion de la mémoire
    Bonjour,

    j'ai un problème lors des affectations suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    System.out.println("ligne verifd:"+tab[0]+" colonne verifd:"+tab[1]);
    tab2[0]=new Integer(tab[0]);
    tab2[1]=new Integer(tab[1]);
    tab2[1]+=1;
    System.out.println("ligne verifd:"+tab[0]+" colonne verifd:"+tab[1]);
    Lors de l'exécution de ces lignes, il arrive que la valeur de tab[1] soit modifiée (elle reste parfois inchangée).

    Ex: résultat de l'affichage:
    ligne verifd:7 colonne verifd:1

    ligne verifd:7 colonne verifd:2

    On dirait que tab2[1] est une référence vers tab[1] et que lorsque que je fais tab2[1]+=1, tab[1] est aussi incrémenté. Pour essayer de remédier au problème, j'affecte un entier qui vient juste d'être créé à tab2[1], mais cela n'y change rien.

    J'aimerais donc que le tableau tab ne soit pas modifié, contrairement au tableau tab2.

    Merci.

  2. #2
    Membre confirmé Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Points : 570
    Points
    570
    Par défaut
    Il faudrait que tu nous montres comment tu crées tes tableaux tab et tab2 et comment tu affectes les valeurs, en fait montre nous plus de code, car là c'est assez difficile à voir ce qu'il ne va pas vu qu'en fait tu n'as pas d'erreur mais une execution non souhaitée.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2006
    Messages : 25
    Points : 26
    Points
    26
    Par défaut
    N'as-tu pas qqpart?

  4. #4
    Membre confirmé Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Points : 465
    Points
    465
    Par défaut
    ici je mets tab[i].clone(); c'est ce que tu demandes.

  5. #5
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    +1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tab2[1]=new Integer(tab[1]);
    tab2[1]+=1;
    tableau d'objets != tableau de type primitifs !
    Dans ton cas tu manipules des références et non des copies.

  6. #6
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Ici, le fait qu'on manipule des références au lieu de types primitifs ne change rien, Integer étant immutable...

    Tu n'es d'ailleurs pas obligé de faire "new Integer..." car avec l'auto-boxing/unboxing, ça ne pose pas de problème.

    Sinon, il n'y a pas de problèmes, regarde sur cet exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class TestTabInteger {
     
        public static void main(String... args) {
            Integer[] tab1 = { 1 }, tab2 = { tab1[0] };
            tab1[0]++;
            System.out.println(tab2[0]);
        }
    }
    ça affiche bien 1, donc seul la case 0 du tableau 1 est incrémentée...

  7. #7
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Humm pour ma culture c'est valable depuis la 1.5 ça non ? De mon côté, je ne préfère pas mélanger types primitifs et objets. Pour faire un simple monInteger++, ok. Mais pour le reste

    EDIT je retire ma réponse, j'avais mal lu ton post qui correspondait bien à ce que je pensais. Neanmoins cette nouvelle facilité d'écriture me laisse perplexe. Tableaux de pointeurs... vive le C.

Discussions similaires

  1. Problème de gestion de la mémoire.
    Par zuzuu dans le forum Langage
    Réponses: 2
    Dernier message: 07/05/2009, 13h59
  2. Problème de pointeurs et de gestion de la mémoire
    Par remixtech dans le forum Débuter
    Réponses: 1
    Dernier message: 27/06/2008, 21h20
  3. Problème de gestion de mémoire - grosses matrices
    Par julesu dans le forum Fortran
    Réponses: 9
    Dernier message: 26/05/2008, 11h04
  4. Problème de gestion de mémoire
    Par Baud10 dans le forum MFC
    Réponses: 6
    Dernier message: 04/01/2008, 10h49
  5. Problème de gestion de mémoire (segfault)
    Par Michaël dans le forum C
    Réponses: 7
    Dernier message: 26/05/2007, 09h30

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