Liste kopieren;



  • Hi Leute!

    Ich habe eine Frage;

    Ich habe eine Liste;
    liste {1, 2, 3, 4, 5, 6}

    Ich möchte aus dieser Liste eine Kopie machen.

    Wenn Ich aber aus der Kopie einen Element lösche, wird er auch aus dem Original auch gelöscht.

    Was kann Ich dagegen machen ?

    Viele Grüsse

    lena



  • fanbjs schrieb:

    Ich habe eine Liste;
    liste {1, 2, 3, 4, 5, 6}

    Das ist keine Liste. Das ist ein Bezeichner und eine geschweifte Klammer mit einigen durch Komma getrennten Zahlen.

    Wenn Ich aber aus der Kopie einen Element lösche, wird er auch aus dem Original auch gelöscht.

    Dann hast du in deinem Code etwas falsch gemacht. Vermutlich wirfst du die Zeiger durcheinander.

    Was kann Ich dagegen machen ?

    Mach's richtig.

    Der Fehler liegt in deinem Code. Den Code hast du nicht gezeigt. Wie soll dir jemand helfen können?



  • Vielen Dank für deine Antwort!!
    meine Kode:

    typedef struct freq freq_t;
    typedef struct lut lut_t;
    typedef struct table table_t;
    
    typedef struct freq {
      int  instr;
      freq_t *next;
    };
    
    typedef struct lut {
      freq_t  *tab;
      freq_t *init;
       int entries;
     };
    
    typedef struct table{
      lut_t *Tables;
      int number;
    
    };
    
    freq_t* pointer;
    
    void  CreateList()
    {
     int j, k;
    
     for(i =0; i<Set[0].number; i++)
     {
      for ( j =0; j < Set[0].Tables[i].entries; j++)
      { 
        if( Set[0].Tables[i].init == NULL) 
        {
          if((Set[0].Tables[i].init = ( freq_t *) 
            malloc(sizeof( freq_t))) == NULL)
          {
    	 fprintf(stderr, "No mamory is for init\n");
    	 return;
          }
          Set[0].Tables[i].init->instr = Set[0].Tables[i].tab[j].instr;
          Set[0].Tables[i].init->next = NULL;
        }else{
          pointer=Set[0].Tables[i].init;
          while(pointer->next != NULL)
    	pointer = pointer->next;
    	if((pointer->next =(freq_t *)malloc(sizeof(freq_t))) == NULL) 
    	{
    	  fprintf(stderr,"Kein Speicherplatz für das letzte Element\n");
    	  return;
    	}	
            pointer=pointer->next; 
    	pointer->instr =Set[0].Tables[i].tab[j].instr;
    	pointer->next=NULL;
        }
      }
     }
    }
    
    void Copie()
    {
       int i; 
    
       for (i =0; i < Set[0].number; i++)
       { 
         Set[1].Tables[i].init = Set[0].Tables[i].init;
       }
    }
    


  • fanbjs schrieb:

    void Copie()
    {
       int i; 
    
       for (i =0; i < Set[0].number; i++)
       { 
         Set[1].Tables[i].init = Set[0].Tables[i].init;
       }
    }
    

    Das kann man nicht wirklich eine Kopie nennen. Du kopierst nur den init-Zeiger und hast damit zwei Zeiger auf dieselbe Liste.



  • Und wie kann Ich dann die Liste kopieren ?

    Viele Grüsse
    lena



  • fanbjs schrieb:

    Und wie kann Ich dann die Liste kopieren ?

    Indem du die Inhalte kopierst. Du musst eine komplett neue Liste mit den Daten der alten aufbauen. Dafür gibt es keine fertige Funktion.



  • Vielen Dank.


Anmelden zum Antworten