ホームページ  >  記事  >  バックエンド開発  >  C で std::strings を含む構造体にメモリを正しく割り当てるにはどうすればよいですか?

C で std::strings を含む構造体にメモリを正しく割り当てるにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-24 06:17:14686ブラウズ

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

C での std::Strings を使用した構造体の処理 : メモリ割り当てのナビゲート

C で、 std::strings と std::strings を含む構造体を処理する場合malloc() を利用すると、特定の落とし穴が発生する可能性があります。次の例を考えてみましょう:

struct example {
 std::string data;
};

int main() {
 example *ex = (example *)malloc(sizeof(*ex));
 ex->data = "hello world";
 std::cout << ex->data << std::endl;
}

実行すると、このプログラムはセグメンテーション違反でクラッシュします。この動作は、malloc() の固有の性質と std::strings の構築に由来します。

不正広告とメモリ割り当て

new とは異なり、malloc() は単にメモリを割り当てるだけです。生の記憶。このコンテキストでは、malloc() で処理されたメモリを「実際の」オブジェクトとして使用しようとすると、未定義の結果が生じる可能性があります。メモリ内のオブジェクトを正しくインスタンス化するには、malloc() の代わりに new を使用します。

example *ex = new example;

malloc() を騙して連携

または、malloc を組み合わせて使用​​します。 () と new 演算子を配置すると、malloc() でオブジェクトを構築できます。 Memory:

void *ex_raw = malloc(sizeof(example));
example *ex = new(ex_raw) example;

ただし、std::strings で構造体を管理するコンテキストでは、これらの手法の採用が不必要であることが判明する可能性があります。

以上がC で std::strings を含む構造体にメモリを正しく割り当てるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。