Java.lang.StackOverflowError avc eclipse

Bonsoir j au eu un petit problème dans mon code java , je travaille avec l IDE eclipse et des que je lance l exécution voila l erreur kil m affiche

Exception in thread "main" java.lang.StackOverflowError
at pack3.cellule.<init>(cellule.java:8)

je précise kil s agit d une erreur dans ma classe cellule sur la ligne 8,voila le petit bout de code qui fait erreur :

package pack3;

public class cellule {
private cellule suivante ;
private int contenu;
public cellule()// créer une cellule et initialiser
// son contenu a 0 et son pointeur svt a null
{cellule c =new cellule();
c.suivante=null;
c.contenu=0;

}

je vous remercie d avance

2 réponses

  • Votes
  • Date
  • Date décroissante
  1. Ton problème vient effectivement de là :
    t'as un appel récursif sur le constructeur de cellule, et un moment, ca "déborde" et génère un StackOverflow
    1. Contributeur
      Euh juste une question pourquoi tu appelles une cellule dans une autre cellule?

      parce que je suppose que dans un code extérieur tu fais un cellule pipo = new cellule();

      Donc à quoi te sers dans ton constructeur de mettre cellule c =new cellule(); ?

      Donc je verrais la classe cellule comme :

      package pack3;
      
      public class cellule {
      private cellule suivante ;
      private int contenu;
      public cellule()// créer une cellule et initialiser
      // son contenu a 0 et son pointeur svt a null
      {
              suivante=null;
              c.contenu=0;
      } 
      


      Ensuite voit si ton problème se pose toujours.
      1. ben g fait s que tu ma suggérer mais le problème persiste toujours ,euhhh juste une autre question on exécute ainsi run ---> run as --->java application ?? c comme sa ??
      2. Contributeur
        Oui comme ça.

        Tu pourrais donner le code qui accède à ta fonction cellule?

        Hormis ça sinon je vois pas ce qui pourrait causer le StackOverFlow, à moins que ton code externe qui appelle la classe cause lui le problème.

        PS : Bien vu JeanGilles, en effet je pense que le problème vient de là aussi, je viens d'y penser, on appelle la classe Cellule, qui elle même s'appelle, donc appel à la même classe qui s'appelle à l'infini, c'est sur que le StackOverFlow il est pas loin ...
      3. voila le code ki appelle cette fction
        package pack3;

        public class liste extends cellule {

        private cellule debut;
        private int taille;
        public liste ()
        {//cree une liste vide
        debut=null;
        taille=0;

        }
        public liste (cellule c)//cree 1 liste contenant c en tete
        {
        this.debut = c;
        this.taille++;

        }
        public boolean isEmpty()
        {
        return debut==null;
        }
        public cellule getFirst() {
        return this.debut;
        }
        public void addFirst(int elem)//insere une cellule de elem
        {
        cellule c= new cellule(elem,this.debut);
        this.taille++;

        }
        je vous remercie
      4. Contributeur
        Je pense d'après ton code que tu essaies de faire des listes chaînées, hors en Java la notion de pointeur n'existe pas comme en C++ par exemple.

        Expose nous plutôt ce que tu veux faire, mais à mon avis je pense ne pas en être loin.