On Thursday 19 February 2004 14:16, Michael Unterkalmsteiner wrote:
ACK, da hab ich wohl geschlafen, trotzdem schmiert das Programm weiterhin ab und ich hab weiterhin Tomaten auf den Augen und find den Fehler nicht.
Das hängt aber wohl damit zusammen; ich weiß nicht genau, was dieses
g_list_prepend() macht, aber ich denke mal, es allokiert wohl nicht selber
nochmal Speicher für den Dateinamen - dafür mußt Du selber sorgen. Der Inhalt
von "dir", also auch "dir->name", wird irgendwann ungültig - "dir" zeigt auf
eine Struktur innerhalb von readdir(). Du merkst Dir also in dieser Liste
-zig mal die gleiche Adresse, wo aber inzwischen schon gar nichts mehr oder
irgendwas anderes steht.
-> Du mußt für den Namen selber Speicher allokieren, etwa so:
name = strdup( dir->d_name );
di->name = g_list_prepend (di->name, name);
Und freigeben wieder, wenn Du die gesamte Liste zerstörst - und erst dann.
Da lernt man die Vorzüge von C++ und anständigen String- und Containerklassen
gleich wieder richtig zu schätzen... ;-)
CU
--
Stefan Hundhammer