Heim > Backend-Entwicklung > C++ > Wie ordne ich Speicher für Strukturen, die Strings in C enthalten, richtig zu?

Wie ordne ich Speicher für Strukturen, die Strings in C enthalten, richtig zu?

DDD
Freigeben: 2024-12-01 09:47:12
Original
709 Leute haben es durchsucht

How to Correctly Allocate Memory for Structures Containing Strings in C  ?

Zuweisen von Strukturen, die Strings enthalten, mit Malloc

Beim Versuch, den Speicher für eine Struktur mit std::string-Mitgliedern mit malloc() zu verwalten, kommt es zu Segfehlern kann vorkommen. Dies liegt daran, dass malloc() eine Rohspeicherzuweisung bereitstellt, anstatt Objekte zu erstellen.

Verwendung von new für die Objektzuweisung

Um Speicher für eine Struktur mit std::string korrekt zuzuweisen Mitglieder, verwenden Sie new anstelle von malloc(). new erstellt das Objekt automatisch im zugewiesenen Speicher.

Beispiel:

#include <iostream>
#include <string>

struct example {
  std::string data;
};

int main() {
  example *ex = new example; // Allocate memory using 'new'
  ex->data = "hello world";
  std::cout << ex->data << std::endl;
  delete ex; // Release allocated memory when done
}
Nach dem Login kopieren

Platzierung neu für Rohspeicherverwaltung

Wenn mit malloc() bereits Speicher zugewiesen wurde, ist es möglich, mit „placement new“ das Objekt darin zu erstellen Speicher.

Beispiel:

void *ex_raw = malloc(sizeof(example));
example *ex = new(ex_raw) example; // Construct the object in allocated memory using placement 'new'
Nach dem Login kopieren

Für die Objektkonstruktion wird jedoch im Allgemeinen die direkte Verwendung von „new“ der Platzierung „new“ vorgezogen.

Das obige ist der detaillierte Inhalt vonWie ordne ich Speicher für Strukturen, die Strings in C enthalten, richtig zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage