Statische Liste mit Zeigern?

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
Ginsengelf
Beiträge: 79
Registriert: 2. Mai 2007 10:21

Statische Liste mit Zeigern?

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Da die Strings statisch sind funktioniert das problemlos.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Ginsengelf
Beiträge: 79
Registriert: 2. Mai 2007 10:21

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Die Strings stehen im Datensegment deines Programmes und haben deshalb währende des ganzen Programmablaufs immer die gleiche Adresse.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten