verkette Liste - Accesviolation



  • HI ich habe eine einfach verkettete Liste, die ich mit werten Fülle;
    Beim löschen der Liste kommt es dann allerdings zu einer Access Violation, obwohl laut debugger der Pointer auf einen Wert zeigt, den ich vorher reserviert habe und dessen Inhalt noch immer der gleiche ist!!

    hier der Code:

    while(m_Functionlist->next!=0)	//until the list is empty
    	{
    		temp=m_Functionlist;
    		while(temp->next->next!=0)
    			temp=temp->next;
    		//start freeing memory
    		if(temp->next->Param!=0)	//free Param-Memory
    			free(temp->next->Param);
    		if(temp->next->Testname!=0)	//free Testname-Memory 
    			free(temp->next->Testname); //HIER bekomme ich die Access violation, allerdings erst beim 3. mal (laut Debugger gültige werte!!!)
    		free(temp->next);			//free Structure-Memory
    		temp->next=0;				//set Pointer to zero
    	}
    


  • free ??
    sieht mir sehr nach C aus.
    Verschoben. ➡



  • Warum machst dus eigentlich so umständlich? Dein Code skaliert quadratisch. Machs besser so:

    /* cur_p, next_p seien node-pointer, wie temp in deinem Code */
    next_p = m_Functionlist;
    while(next_p != 0) 
    {
      cur_p = next_p;
      next_p = cur->next;
      if(cur_p->Param != 0) 
        free(cur_p->Param);
      if(cur_p->Testname != 0)
        free(cur_p->Testname);
      free(cur_p);
    }
    

    Anonsten würde ich vermuten, dass du an einer Stelle vergessen hast, Testname zu initialisieren (das Ding zeigt nicht automatisch auf NULL).



  • danke, hätte ich eigentlich auch drauf kommen könne 😉

    Nein, ist 100%ig initialisiert und wie gesagt, laut debugger auch gültige daten!


Anmelden zum Antworten