Seite 1 von 1

Statische Liste mit Zeigern?

Verfasst: 29. August 2008 09:55
von Ginsengelf
Moin,

ich war gerade dabei, folgendes Konstrukt zu erzeugen:

Code: Alles auswählen

void Klasse::methode ()
    {
    static QList < const char* > s_ListOfStrings;

    // die Liste nur einmal füllen
    if (s_oValidSeries.size () == 0)
        {
        // so richtig koscher ist das nicht (static und Zeiger?)
        s_ListOfStrings.append ("lustigerString");
        s_ListOfStrings.append ("nochEinString");
        s_ListOfStrings.append ("undEinLetzterString");
        }
    // ...
    }
Es hat bis jetzt immer funktioniert, aber ich meine, dass das geradezu nach einen Speicherzugriffsfehler schreit, wenn ich ein zweites, drittes, x-tes Mal die Methode aufrufe, weil eigentlich die Strings nicht mehr existent sein sollten, oder?

Ginsengelf

PS: ich weiß, dass ich das mit QStrings statt char* vernünftig erreichen kann, es geht nur ums Prinzip.

PPS: Ich könnte natürlich die Liste jedesmal leeren und neu füllen, aber das wollte ich durch das statische Objekt vermeiden.
Zur Not wird es eine Membervariable, und einmalig im Konstruktor gefüllt.

Verfasst: 29. August 2008 11:19
von Christian81
Da die Strings statisch sind funktioniert das problemlos.

Verfasst: 29. August 2008 11:25
von Ginsengelf
Moin, das ist schön. Ich hatte gedacht, der String würde nach verlassen der Methode als lokale Variable gelöscht werden.

Danke für die Aufklärung.

Ginsengelf

Verfasst: 29. August 2008 11:40
von Christian81
Die Strings stehen im Datensegment deines Programmes und haben deshalb währende des ganzen Programmablaufs immer die gleiche Adresse.