src and dest overlap in memcpy() : unverständlich



  • Hallo ich bekomme bei dem unten stehenden code über valgrind ein src and destination overlap bei memcpy() in der Funktion Solution() wobei das memcpy dort nur in einer subroutine auftritt und zwar bei copy-vector().

    Wo liegt denn mein Fehler?

    Der code ist vereinfacht!!!

    Class::function()
    {
    
    	double			*A 			= NULL,
    				  *mk 		= NULL,
    				  *ek 		= NULL;
    
    	for (int step = -1; step < max_impr_steps; step++)
    	{
    
                    //Gibt pointer auf array zurück
    		A = Create_A(...);
    
    		Solution(A, mk, ek);
    
                   //Bei spezieller condition breche ich schleife ab - deswegen unten
                  //nochmal delete
    
    		delete [] mk;
    		delete [] A;
    		delete [] ek;
    	}
    
    	//do_something....
    
    	//Free heap storage last time
    	if (mk)		delete [] mk;
    	if (ek)		delete [] ek;
    	if (A)		delete [] A;
    }
    
    Class::Solution(double*	 A_orig, 
    			double*& 	mk_Hat,
    			double*& 	ek_Hat
    			)
    {
    
    	double			*A = NULL;
    
    	A = Copy_Vector(A_orig);
    
    	mk = Create_ek(...);	
    
    	ek = Copy_Vector(mk);
    
            //do_something....
    
    	delete [] A;
    }
    
    Class::Copy_Vector(T*	in, const int len)
    {
    	T*	out;
    	out = new T[len];
    	memcpy(out, in, len * sizeof(T));
    
    	return out;
    }
    

    der fehler lautet:

    ==6883== Source and destination overlap in memcpy(0x59B1CF0, 0x59B1CF0, 8)
    ==6883==    at 0x4022ED6: memcpy (mc_replace_strmem.c:116)
    ==6883==    by 0x804AAE5: Class::Solution(double*double*&, double*&,) (in /...)
    ==6883==    by 0x804D620: Class::function() (in /...)
    ==6883==    by 0x8049922: main (in /...)
    


  • EDIT:!!!!!!!!!!!!!!!!!!!!!!!!!!

    Ist gelöst - der fehler lag wo anders.....ich hatte noch ein memcpy() wo wirklich src und dest overlap war!!!!!!!!!!!1



  • testo schrieb:

    EDIT:!!!!!!!!!!!!!!!!!!!!!!!!!!

    Ist gelöst - der fehler lag wo anders.....ich hatte noch ein memcpy() wo wirklich src und dest overlap war!!!!!!!!!!!1

    Doll, 38 Ausrufezeichen (die '1' mitgezählt) vs 85 Buchstaben.. Su!pe!r Q!uo!te!, ma!ch!t e!in! Au!sr!uf!ez!ei!ch!en! au!f z!we!i B!uc!hs!ta!be!n 👎
    Was zur Hölle verspricht man sich davon?



  • Mehr Aufmerksamkeit
    Aber das verhält sich wie mit Spam, je mehr Ausrufezeichen desto weniger lesenswert ist meist der Beitrag.



  • Ok, das nächste mal lasse ich euch Fehler suchen obwohl es gar keinen gibt. 😡



  • testo schrieb:

    Ok, das nächste mal lasse ich euch Fehler suchen obwohl es gar keinen gibt. 😡

    Ach Quatsch, ist doch gut, dass du Bescheid gesagt hast! Ich hab mich nur gewundert, warum allein schon das "EDIT:" 26 Ausrufezeichen braucht 🙂


Anmelden zum Antworten