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

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

DDD
DDDオリジナル
2024-12-01 09:47:12705ブラウズ

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

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 サイトの他の関連記事を参照してください。

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