Malloc を使用した文字列を含む構造体の割り当て
malloc() を使用して std::string メンバーを含む構造体のメモリを管理しようとすると、セグメンテーション違反が発生しますが発生する可能性があります。これは、malloc() がオブジェクトを構築するのではなく、生のメモリ割り当てを提供するためです。
オブジェクト割り当てに new を使用する
std::string を使用して構造体にメモリを正しく割り当てるにはメンバーの場合は、malloc() の代わりに new を使用してください。 new は、割り当てられたメモリ内にオブジェクトを自動的に構築します。
例:
#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 }
Raw メモリ管理用の新しい配置
malloc() を使用してメモリがすでに割り当てられている場合は、placement new を使用してその中にオブジェクトを構築することが可能ですMemory.
例:
void *ex_raw = malloc(sizeof(example)); example *ex = new(ex_raw) example; // Construct the object in allocated memory using placement 'new'
ただし、オブジェクトの構築では、new を直接使用することの方が、new を配置するよりも一般的に好まれます。
以上がC で文字列を含む構造体にメモリを正しく割り当てるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。