2016-08-24 8 views
-1

i, m versuchen, Zeiger auf Zeiger ListeZugriffsverletzung Fehler beim Erstellen Zeiger auf Zeigerliste

list<ObjectClass*> *lst_testList;

und versuchen, es erstellen zu verwenden, um diese Art und Weise

void FunctioningClass::functioningMethod() 
{ 
    ObjectClass *object = new ObjectClass(); 
    object->i_testing = 234; 
    lst_testList->push_back(object); 
    object = lst_testList->front(); 
    cout<<object->i_testing; 
    std::getchar(); 
} 

ich das Programm bauen . Aber wenn ich es ausführe, gibt es mir diesen Fehler.

Unbehandelte Ausnahme bei 0x012885DA in ConsoleApplication7.exe: 0xC0000005: Zugriffsverletzung Leseort 0x00000004.

bemerkt, dass, wenn ich die Liste wie diese

list<ObjectClass*> lst_testList; 

erstellen und es so verwenden,

lst_testList.push_back(object); 

es didn, t mir einen Fehler geben.

+1

Ist 'lst_testList' baumelt? Ich meine, hast du es initialisiert? – songyuanyao

+0

http://stackoverflow.com/questions/6500313/why-should-c-programmers-minimize-use-of-new –

Antwort

1

Solche list<ObjectClass*> lst_testList; Variable ist default-initialized.

Für Zeiger list<ObjectClass*>* lst_testList; Standardinitialisierung wird nicht ausgeführt. Die richtige Initialisierung für sie ist:

list<ObjectClass*>* lst_testList = new list<ObjectClass*>(); 

oder

list<ObjectClass*>* lst_testList = NULL; 

Es auf Ihre Ziele abhängt.

+0

Gibt es Vorteile und Nachteile zwischen zwei Methoden? –

+0

@YasithaBandara Es ist schwer zu sagen. Dies hängt von der Architektur Ihrer Anwendung ab (z. B. von der Sichtbarkeit von 'lst_testList'). Wenn es sich um eine globale Variable handelt, können Sie eine einzelne Instanz 'new list ()' erstellen und über die Anwendung verwenden. Wenn es sich um ein Feld von 'FunctioningClass' handelt, können Sie' lst_testList' auf 'NULL' initialisieren und eine Instanz' new_list () 'später erstellen, wenn sie benötigt wird. – Nikita

+0

@YasithaBandara Allgemeiner Ansatz besteht darin, Zeiger immer auf einen Wert zu initialisieren. 'NULL' garantiert vorhersehbares Verhalten. Es ist leicht zu verstehen, warum Zeiger "NULL" ist, aber sehr schwer, unvorhersehbares Verhalten von [dangling pointer] zu debuggen (https://en.wikipedia.org/wiki/Dangling_pointer). – Nikita

3

list<ObjectClass*> *lst_testList ist ein Zeiger auf eine Liste von Object Zeiger. Um es zu verwenden, müssen Sie es entweder zuerst zuweisen oder (wie Sie bereits herausgefunden haben) verwenden Sie list<ObjectClass*> lst_testList (das ist eine Liste zu ObjectClass-Zeigern).

Verwandte Themen