Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Fehler bei getline
Mein Valgrind spuckt Fehlermeldung und ich kann sie mir nicht erklaeren:
…
char line = NULL;
size_t len = 0;
ssize_t rd;
/
* Beim einlesen gibt es beim ersten mal lesen einer leeren zeile
* oder eines einzelnen zeichens einen invalid read of size 1
*/
while((rd = getline(&line, &len, stdin)) != -1) {
…//ich spiele hier weder an line noch an len rum
}
valgrind bekommt dann in der zeile des while einen invalid read of size 1
Jemand eine Idee woran das liegen koennte?
Danke schonmal
An so einer Stelle waere die genaue Ausgabe von valgrind sehr hilfreich.
Generell bedeutet invalid read of size X, dass du (bzw. eine Unterfunktion) versuchst X Bytes von einer ungueltigen Adresse zu lesen.
PS:
… nur als Tipp (kann ja auch sein, dass du das schon beachtet hast).
Hier die genaue Ausgabe
line bleibt definitiv unverändert, hab mir line jeweils am anfang und am ende der schleife ausgeben lassen…
Dass ich line freen muss weiß ich, muss ich aber erst nachdem ich damit fertig bin? (ich kann getline ja auch vorinitialisierten speicher geben) (außerdem hab ich das schon probiert, free(line); line=NULL; am Ende der Schleife, hat nichts gebracht…
EDITh stellt fest, dass ich mich blöd angestellt hab, Problem gelöst
Wozu verwendest du [m]getline(3)[/m]?
Bei der wsort ist [m]getline(3)[/m] nicht so eine gute Idee, weil du ja sowieso nur begrenzt lange Zeilen verarbeiten willst - da extra Speicher anzufordern ist keine gute Idee. Bei der snail geht es zeichenweise auch deutlich einfacher und schneller (siehe anderer Thread).