Umgang mit Strukturen mit std::Strings in C: Navigieren in der Speicherzuordnung
In C beim Umgang mit Strukturen, die std::strings und enthalten Bei der Verwendung von malloc() können bestimmte Fallstricke auftreten. Betrachten Sie das folgende Beispiel:
struct example { std::string data; }; int main() { example *ex = (example *)malloc(sizeof(*ex)); ex->data = "hello world"; std::cout << ex->data << std::endl; }
Bei der Ausführung stürzt dieses Programm mit einem Segmentierungsfehler ab. Dieses Verhalten ergibt sich aus der inhärenten Natur von malloc() und der Konstruktion von std::strings.
Maldvertising und Speicherzuweisung
Im Gegensatz zu new führt malloc() lediglich eine Zuweisung durch rohes Gedächtnis. In diesem Zusammenhang kann der Versuch, malloc()-ed-Speicher als „echtes“ Objekt zu verwenden, zu undefinierten Ergebnissen führen. Um Objekte im Speicher korrekt zu instanziieren, verwenden Sie new anstelle von malloc():
example *ex = new example;
Malloc() in Kooperation bringen
Alternativ durch Verwendung einer Kombination von malloc () und dem Platzierungs-New-Operator ist es möglich, Objekte im malloc()-ed-Speicher zu erstellen:
void *ex_raw = malloc(sizeof(example)); example *ex = new(ex_raw) example;
Allerdings mit diesen Techniken können sich im Zusammenhang mit der Verwaltung von Strukturen mit std::strings als unnötig erweisen.
Das obige ist der detaillierte Inhalt vonWie kann ich Speicher für Strukturen, die std::strings in C enthalten, korrekt zuweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!