PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : invalid write of size 1



Sascha Bahl
03-04-2006, 21:43
Hi!

Habe ein kleines Problemchen und sehe irgendwie den Grund nicht. Folgende Funktion sorgt bei mir für einen Fehler, wie Valgrind meldet.

void FileObserver::setFile( const char* myFile )
{
this->m_myFile = (char *)malloc( sizeof(char) * strlen(myFile) );
memset( this->m_myFile, '\0', strlen(myFile) );
strcpy( this->m_myFile, myFile );
}

Die Ausgabe von Valgrind:
invalid write of size 1
...
Adress 0xirgendwas is 0 bytes after a block of size 27 alloc'd

Wenn ich mein Programm debugge, kann ich allerdings feststellen, dass in this->m_myFile genau das selbe wie in myFile steht. Insofern wäre doch alles in Ordnung. Also, ich sehe den Fehler nicht. Vielleicht kann mir jemand helfen ihn zu sehen.

Grüße

quinte17
04-04-2006, 08:40
du holst dir mit malloc einen speicherbereich der
1*x groß ist.
danach tust du diese x bytes mit \0 füllen.
und nun willst du mit
strcpy(zielpointer,quellpointer) (wobei zielpointer auf eine speichergröße von sizeof(quellpointer)+1 sein muss, da strcpy noch ein \0 ans ende stellt.

somit ist dein memset eh überflüssig...

dein pufferüberlauf findet also in strcpy statt, welches 1 byte '\0' noch ans ende von der länge von myfile schreibt.

greetz

Sascha Bahl
04-04-2006, 21:05
Ja, da hast Du vollkommen recht. Tse, ich war wirklich zu kurzsichtig und hatte angenommen, dass strlen mir die Länge inklusive null-Zeichen zurückgibt. Aber das ist ja quatsch.
Vielen Dank für Deine Hilfe!