Dynamisch zugewiesenen string-array, dann ändern Sie es Wert?
Ich versuche, einen string-array und verwenden Sie einen Zeiger, um es zu ändern. Ich bin mir nicht sicher, wie Sie Sie deklarieren, die Zeiger da die Saiten können in der Länge variieren, und ich denke, das ist, was den Fehler verursacht hat.
Mein code sieht ungefähr so aus:
#includes <string>
#includes <iostream>
using namespace std;
string *users = NULL;
int seatNum = NULL;
cin >> seatNum;
users = new string[seatNum];
string name;
cin >> name;
users[seatNum] = name;
Wirft er mir ein Schreiben Zugriffsverletzung, wenn ich versuche, um den Wert zu ändern. Von dem, was ich gelesen habe, es ist, weil Zeichenfolgen kompiliert werden als nur-Lesen, also meine Frage ist, wie würde ich/was würde ich tun, um es zu ändern? Einfach-zu-verstehen Erklärungen vorzuziehen wäre.
users = new string[seatNum];
erstellt ein array von strings indiziert0
zuseatNum - 1
, sousers[seatNum]
Zugriffe über die Grenzen des Arrays.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hast Zugriff auf Speicher außerhalb des Bereichs des zugewiesenen Arrays
Das erste element [0]. Der Letzte ist [seatNum-1]
Haben Sie erstellt ein array von
seatNum
Elemente. Array-element die Indizierung beginnt bei0
daher der Bereich der zulässigen Indizes ist[0, seatNum - 1]
. Durch den Zugriff aufusers[seatNum] = ...
Sie effektiv geht vorbei an der letzten gültigen element des Arrays. Dies ruft UB (Undefiniertes Verhalten).Ich sehe, haben Sie bereits die richtige Wahl getroffen mit
std::string
anstelle von C-style strings. Warum machen Sie nicht die gleiche Wahl über arrays?Versuchen zu vermeiden, Zeiger und arrays im C-Format, vor allem dynamische diejenigen.
Ein paar Dinge:
int seatNum wird auf dem Stapel reserviert und wird nie NULL sein. Sollten Sie es auf 0.
Sind Sie Benutzer[seatNum] die out-of-bounds, so dass Ihr Programm zum Absturz zu bringen. Sie
nur können Indizes von 0 bis seatNum-1.
Aktualisiert: Chris ist richtig. Ich schaute hinein und Streicher sind in der Tat veränderlich in C++.