C ++ - Zeichenfolgen und -Zeiger

8

Ich lerne C ++ und derzeit arbeite ich mit Strings und Zeigern.

Ich folge einem Übungsbuch und für eine der Fragen habe ich folgendes erstellt:

%Vor%

Um mehr Zeiger zu verwenden, habe ich versucht, sie mit Strings zu mischen und die Lösung aus diesem Grund komplexer zu machen. Wenn ich das ausführe, bekomme ich eine "Unhandled Exception: Access violation Leseort xxxxxxxxx".

Kann jemand bitte eine Lösung vorschlagen, indem er immer noch Zeiger und Strings anstelle von Char-Arrays verwendet (was ich bereits herausgefunden habe)?

    
Dan 04.03.2012, 12:21
quelle

7 Antworten

12

Dies liegt daran, dass Sie Ihre Objekte vor ihrer Verwendung nicht zuordnen haben:

%Vor%

Es lohnt sich, hinzuzufügen, dass die Verwendung von Zeigern in dieser Situation sinnlos ist: String-Objekte in der C ++ - Standardbibliothek weisen die Daten für die Zeichenfolge vom Heapspeicher zu; Zeichenfolgen sind normalerweise nicht viel mehr als ein Paar Zeiger.

    
dasblinkenlight 04.03.2012 12:24
quelle
2

Es würde so aussehen:

%Vor%

Aber es gibt wirklich keinen Grund, dies zu tun, definieren Sie einfach eine normale String-Variable auf dem Stapel.

    
cooky451 04.03.2012 12:25
quelle
2

Sie erhalten Fehler, weil Sie Zeichenfolgen als Zeiger verwenden und diese nicht initialisieren. Eine korrekte Vorgehensweise wäre:

%Vor%

Sie können tatsächlich Zeiger auf Strings verwenden, aber sie sollen als lokales Objekt verwendet werden und als Referenzen (oder Const-Referenzen, wenn Sie es wünschen) weitergegeben werden.

    
Dacav 04.03.2012 12:27
quelle
2

Ich denke, Sie wollen pointers überhaupt nicht verwenden. Sie können mit strings ohne Zeiger arbeiten.

%Vor%

Sonst müssen Sie, wenn Sie Zeiger benötigen, Speicher für Variablen zuweisen:

%Vor%

... und Druckergebnis mit dem Dereferenzoperator ( * ):

%Vor%     
skywall 04.03.2012 12:25
quelle
1

Die Zugriffsverletzung liegt daran, dass Sie einen Null-Zeiger dereferenzieren.

Nullzeiger ist hier gesetzt

%Vor%

und dann dereferenziert hier

%Vor%

Sie müssen den Vornamen "point" haben (in diesem Fall eine Zeichenfolge). Hier ist eine modifizierte Version ohne die Ausnahmen.

%Vor%     
RobM 04.03.2012 12:43
quelle
0

Lesen Sie die 10 Gebote der c-Programmierung . Einige sind für heutige Entwickler mehr oder weniger veraltet, aber einige sind immer noch wichtig, wie der zweite:

  Du sollst nicht dem Nullzeiger folgen, denn Chaos und Wahnsinn erwarten dich am Ende.

Das machst du eigentlich hier. Deine Zeiger zeigen nirgendwo hin (siehe die Zuweisungen zu std::nullptr ).

Um dies zu korrigieren, müssen Sie dem Zeiger ein neues Objekt der richtigen Klasse / Struktur zuweisen. Vergessen Sie auch nicht, es später zu löschen:

%Vor%     
Mario 04.03.2012 12:26
quelle
0

Da Sie nullptr verwenden, ist eine vollwertige C ++ 11-Lösung wahrscheinlich genauso gut:

%Vor%

Natürlich war nullptr nicht das, was Sie wollten: Sie müssen die Ressourcen zuweisen, die Sie verwenden möchten.

Beachten Sie, dass die Verwendung von Zeigern in diesen einfachen Fällen sowohl syntaktisch als auch bugweise auf den Fuß erfolgt.

BEARBEITEN Ich habe den Code korrigiert (eine vergessene Klammer und die * in der letzten Zeile von main ), er kompiliert und läuft auf GCC 4.7.

    
rubenvb 04.03.2012 12:25
quelle

Tags und Links