Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1058 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [java] Question de gros noob sur l'allocation mémoire.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[java] Question de gros noob sur l'allocation mémoire.

n°821761
Giz
Posté le 12-08-2004 à 18:44:19  profilanswer
 

Code :
  1. public class LiOPermutation extends LiOIndividual{
  2. //seule donnee membre
  3. private int[] mChain;
  4. public LiOPermutation()
  5. {
  6. //LiO est juste une autre classe
  7.         size =LiO.size;
  8.         mChain = new int[size];
  9.      }
  10. public void improve ()
  11. {
  12.  double bestEvaluation, evaluation;
  13.  LiOPermutation tmp, bestPermutation;
  14.  bestEvaluation = evaluation = this.value ();
  15.  bestPermutation = this;
  16.  //tmp = new LiOPermutation ();
  17.  /** look for the best permutation */
  18.  for (int i = 0; i < size; i++)
  19.   for (int j = i+1; j < size; j++)
  20.   {
  21.    //selon vous ci-dessus, ca passe ou ca casse ?
  22.    tmp.copy (this);
  23.    ...
  24.   }
  25. }
  26. }


 
à l'instruction "tmp.copy (this);" ca passe ou ca casse selon vous ?
je précise bien que l'instruction "tmp = new LiOPermutation ();" est en commentaire.


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
mood
Publicité
Posté le 12-08-2004 à 18:44:19  profilanswer
 

n°821816
pascal34
one point !
Posté le 12-08-2004 à 20:24:17  profilanswer
 

Non.
tmp vaut null à ce moment donc un joli NullPointerException t'attend derrière le buisson
 

n°821963
nraynaud
lol
Posté le 12-08-2004 à 23:26:36  profilanswer
 

Citation :

Sujet : Question de gros noob


ta gueule sale noobs, va lire le manuel en cherchatn google.
 
 
 
(scusez, des fois ça fait du bien)
 
Sinon, pour paraphraser au-dessus, les variables de type référence sont initialisées par défaut à null. Appeller une mathode sur null conduit à une NullBiduleException, appellée aussi NPE.

n°822155
Giz
Posté le 13-08-2004 à 10:45:06  profilanswer
 

Ha jsuis content vous me rassurez :). Bon, quand je lance tout ça au debugger, le contenu de la variable tmp est :
tmp = [0, 0, 0, 0] (le tableau mChain est de taille 4). Le pointeur tmp n'est donc pas nul ! et donc l'instruction passe très bien.
Pourquoi ?  :??: ... je l'ignore completement. Au debuggeur sans faire un stepin dans cette methode improve (et toujours sans l'instruction new), tout se déroule bien. Donc pourquoi tmp = [0, 0, 0, 0] et non null ?  [:figti]


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°822184
pascal34
one point !
Posté le 13-08-2004 à 11:12:52  profilanswer
 

Après avoir commenté cette fameuse ligne, le source a bien été recompilé ??

n°822188
Giz
Posté le 13-08-2004 à 11:16:31  profilanswer
 

pascal34 a écrit :

Après avoir commenté cette fameuse ligne, le source a bien été recompilé ??


 
 :jap: tout a fait, d'ailleur je viens juste de démarrer javabeans la, et tout marche bien. (toujours sans l'instruction new).
Conclusion : ca sert a rien l'instruction "tmp = new ..." :D
 
Apparemment, oublié l'instruction new, ce n'est pas un plantage systematique. Un peu comme faire deux instruction delete successive en C++ sur le meme objet. Par contre a terme ca peut planter.


Message édité par Giz le 13-08-2004 à 11:18:16

---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°822305
nraynaud
lol
Posté le 13-08-2004 à 13:36:01  profilanswer
 

non, giz, tu t'es planté quelquepart.

n°822413
pascal34
one point !
Posté le 13-08-2004 à 14:42:53  profilanswer
 

Giz a écrit :

:jap: tout a fait, d'ailleur je viens juste de démarrer javabeans la, et tout marche bien. (toujours sans l'instruction new).
Conclusion : ca sert a rien l'instruction "tmp = new ..." :D
 
Apparemment, oublié l'instruction new, ce n'est pas un plantage systematique. Un peu comme faire deux instruction delete successive en C++ sur le meme objet. Par contre a terme ca peut planter.


 
Ta méthode copy(), elle est pas déclarée 'static' par hasard ???

n°822461
Giz
Posté le 13-08-2004 à 15:07:49  profilanswer
 

pascal34 a écrit :

Ta méthode copy(), elle est pas déclarée 'static' par hasard ???


 
non.
J'avais donc corrigé en mettant le new. Et maintenant je ne peux plus revenir comme avt. (sans le new) ca compile plus, ca me dit "lio/individuals/permutations/LiOPermutation.java [151:1] variable tmp might not have been initialized "
 
Ca devait etre le fichier .class qui merdait (ca recompilait pas vraiment).


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°823943
pascal34
one point !
Posté le 16-08-2004 à 08:57:20  profilanswer
 

Giz a écrit :

non.
J'avais donc corrigé en mettant le new. Et maintenant je ne peux plus revenir comme avt. (sans le new) ca compile plus, ca me dit "lio/individuals/permutations/LiOPermutation.java [151:1] variable tmp might not have been initialized "
 
Ca devait etre le fichier .class qui merdait (ca recompilait pas vraiment).


 
Ca m'arrive quelques fois sous Eclipse

mood
Publicité
Posté le 16-08-2004 à 08:57:20  profilanswer
 

n°828000
Giz
Posté le 20-08-2004 à 18:43:33  profilanswer
 

Tiens une autre question de noob qui me passe par la tête :) :
 
voici l'instruction suivante :

Code :
  1. if ((upperBound - lowerBound) > Integer.MAX_VALUE)
  2. ...


 
précision :
 
upperBound et lowerBound sont 2 int de valeurs quelconques avec upperBound > lowerBound.
 
 
questions :
 
-En gros, comment le compilateur calcule la valeur (upperBound - lowerBound) et où la stocke-t-elle temporairement pour la comparer à Integer.MAX_VALUE ?  [:figti]  
-Ce test marche-t-il ? Si oui, comment ça se passe tout ça en mémoire ?  [:figti]  
 
- mêmes questions mais avec le test :

Code :
  1. if ((upperBound - lowerBound) > Double.MAX_VALUE)
  2. ...


 
upperBound et lowerBound sont 2 doubles de valeurs quelconques avec upperBound > lowerBound.
 
Merci  :hello:


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°828489
raytaller
Posté le 21-08-2004 à 17:59:50  profilanswer
 

Giz a écrit :


Code :
  1. if ((upperBound - lowerBound) > Integer.MAX_VALUE)
  2. ...




ça vaut toujours true, à partir du moment où un entier est toujours compris entre MIN_VALUE et MAX_VALUE

n°829508
the real m​oins moins
Posté le 23-08-2004 à 12:34:59  profilanswer
 

tu voulais dire false


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°829843
Giz
Posté le 23-08-2004 à 16:40:32  profilanswer
 

raytaller a écrit :

ça vaut toujours true, à partir du moment où un entier est toujours compris entre MIN_VALUE et MAX_VALUE


 
C'est vrai que je me posais une question sans penser a la logique du test qui voulait dire "cet entier est-il sup au plus gros des entiers" forcément c'est faux. Du coup faudrait caster le "upperBound - lowerBound" en double pour faire la comparaison  :)


---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°830158
raytaller
Posté le 23-08-2004 à 22:10:18  profilanswer
 

the real moins moins a écrit :

tu voulais dire false


 
exact

n°830765
Giz
Posté le 24-08-2004 à 13:25:13  profilanswer
 

Encore une question de noob. (on devrait en faire un topik unique : [topik unik] Question de noobs :D)
 
Quand on a une classe de base abstraite, y-a-t-il moyen d'y définir un constructeur abstrait de façon à ce que toutes les classes dérivées aient ce contructeur avec CE prototype implémenté. Je pense notamment au constructeur par copie qui garantie bien que l'utilisateur travaillera sur une copie et pas sur une reférence sur l'objet original.
 
Merci  [:icon10]


Message édité par Giz le 24-08-2004 à 13:25:54

---------------
Asus P5Q Pro | C2D E8400 3GHz@4GHz + Noctua NH-C12P | 2x2Go Patriot Extreme PC-8500 | GeForce GTX 460@Stock 1Go GLH | Crucial SSD M4 64Go Sata3
n°830771
nraynaud
lol
Posté le 24-08-2004 à 13:32:26  profilanswer
 

non, les constructeurs ne sont pas hérités, mais oui, on peut appeller les constructeurs de la super-classe depuis les constructeurs des sous-classes et oui, on peut mettre des constructeurs dans une classe abstraite :


abstract class C {
  private int var;
  public C(int var) {
    this.var = var;
  }
}
 
public class D extends C {
  public D() {
    super(10);
  }
}


---------------
trainoo.com, c'est fini
n°830803
the real m​oins moins
Posté le 24-08-2004 à 13:54:28  profilanswer
 

nraynaud a écrit :

non, les constructeurs ne sont pas hérités


sauf le constructeur sans argument, pour peu qu'on ne définisse pas d'autre constructeur.
 
 
... enfin quelque chose dans ce genre là [:augie]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°830864
nraynaud
lol
Posté le 24-08-2004 à 14:47:13  profilanswer
 

ratai.
 
2 choses :
1)si on défini pas de constructeur, un constructeur public sans argument avec un corps vide est syntétisé
 
2)tout constructeur qui n'appelle pas explicitement un autre constructeur appelle implicitement super(). en générant des erreurs si c'est pas possible, j'ai créé un topic à ce sujet il y a un paquet de temps.


---------------
trainoo.com, c'est fini
n°830884
the real m​oins moins
Posté le 24-08-2004 à 15:32:43  profilanswer
 

euh le (2) est valide uniquement pour un constructeur sans argument ou bien un constructeur a argument appelle aussi implicitement le super() ???
 
et pour le (1) oui jme suis vautré, par contre les définir dans une class abstraite qu'on étend permet d'obliger le développeurs à définir au - un constructeur, du coup avec un peu de pot s'il est pas trop con il fera appel au bon super(..)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°830902
benou
Posté le 24-08-2004 à 15:53:36  profilanswer
 

the real moins moins a écrit :

euh le (2) est valide uniquement pour un constructeur sans argument ou bien un constructeur a argument appelle aussi implicitement le super() ???


ce qu'a dit nraynaud est valable dans tous les cas


---------------
ma vie, mon oeuvre - HomePlayer
n°830933
the real m​oins moins
Posté le 24-08-2004 à 16:33:08  profilanswer
 

tous les constructeurs appellent donc le super() implecititement, sauf s'ils appellent un autre super(...)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°830965
nraynaud
lol
Posté le 24-08-2004 à 17:14:00  profilanswer
 

the real moins moins a écrit :

tous les constructeurs appellent donc le super() implecititement, sauf s'ils appellent un autre super(...)

sauf s'ils appellent un autre super() ou un autre this()
 
la logique est simple : on construit l'objet par "étages" en partant du plus concret. Et il est interdit de ne pas construire tous les étages jusqu'à Object, ce qui dans certains cas piège ceux qui ne le savent pas.
 
edit : on construit l'objet par étage, du plus concret jusqu'à Object, en passant soit des this(..) pour rester dans l'étage soit super(...) pour passer à l'étage immédiatement supérieur (je rappelle que les constructeurs ne sont pas hérités donc impossible de sauter des étages, d'autre part ça serait dangereux).


Message édité par nraynaud le 24-08-2004 à 17:17:23

---------------
trainoo.com, c'est fini
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [java] Question de gros noob sur l'allocation mémoire.

 

Sujets relatifs
Question de focusQuestion sur la GD de PHP
Question con sur la mise à jour de PHP ![C] plantage a la liberation de la memoire
[C++] Question rapide...Parcours de boucle...Quel est le plus rapide?Formulaire HTML et application Java
[debutant] Probleme d'allocation memoire pour de grands tableauxquestion sur formulaire
AndroMDA generation JAVA 
Plus de sujets relatifs à : [java] Question de gros noob sur l'allocation mémoire.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR