2016-07-02 12 views
-5
einfügen

Ich versuche zu lernen, wie man einen Stapel mit einem Zeiger einfügen, aber ich bekomme einen Segmentierungsfehler.wie in einen Stapel mit einem Zeiger in C++

+3

ändern 'Stapel * s;' auf 'Stapel s;' und 's->' auf 'Wortlaut des Vermerks. Zeiger sind eine reine Expertenfunktion, die für normalen Benutzercode nicht erforderlich ist. –

+0

Ihr Zeiger s ist ein Zeiger auf Daten des Typs stack , aber der Zeiger ist nicht auf einen Wert initialisiert. Wenn Sie also Daten zum Stapel übertragen, werden die Daten an einen zufälligen Speicherort hinzugefügt. Schreiben in zufällige Speicherorte führt zu einem Segmentierungsfehler. – anneb

+0

Die Bearbeitung hat die Frage komplett geändert, was die folgenden Antworten ungültig macht (und die Leser verwirrt). Das ist verpönt - tu das nicht. – chi

Antwort

4

Ich erhalte einen Segmentierungsfehler.

Dies ist, weil Sie nicht einen Stapel haben, nur einen unassigned Zeiger zu stapeln, die die nicht auf etwas verweisen. Damit s stapeln Punkt, weisen Sie einen neuen Stapel

stack<int> *s = new stack<int>(); 

oder sie einen Stapel bilden, keinen Zeiger

stack<int> s; 

und Verwendung Punkte anstelle von -> Operator.

2
  1. Verwenden Sie kein dynamisch zugewiesenes STL-Objekt, das Sie fast nie tun müssen.

  2. Pointers in C++ kommen nicht initialisiert, wenn Sie wirklich wollen/müssen ein STL-Objekt auf Heap zugewiesen verwenden, dann müssen Sie es initialisieren, zB: stack<int>* s = new stack<int>()

  3. Wenn Sie wirklich, wirklich brauchen sie auf zuzuteilen Heap verwenden Sie dann std::unique_ptr, um die Notwendigkeit zu vermeiden, Speicher direkt zu verwalten.

Verwandte Themen