Heim > Backend-Entwicklung > C++ > Wie kann ich Speicher für Strukturen, die std::strings in C enthalten, korrekt zuweisen?

Wie kann ich Speicher für Strukturen, die std::strings in C enthalten, korrekt zuweisen?

Barbara Streisand
Freigeben: 2024-11-24 06:17:14
Original
809 Leute haben es durchsucht

How Can I Correctly Allocate Memory for Structures Containing std::strings in C  ?

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;
}
Nach dem Login kopieren

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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage