Maison >développement back-end >C++ >Comment allouer correctement la mémoire aux structures contenant des chaînes en C ?

Comment allouer correctement la mémoire aux structures contenant des chaînes en C ?

DDD
DDDoriginal
2024-12-01 09:47:12642parcourir

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

Allocation de structures contenant des chaînes avec Malloc

Lors de la tentative de gestion de la mémoire pour une structure contenant des membres std::string à l'aide de malloc(), des erreurs de segmentation peut survenir. En effet, malloc() fournit une allocation de mémoire brute plutôt que de construire des objets.

Utiliser new pour l'allocation d'objets

Pour allouer correctement la mémoire pour une structure avec std::string membres, utilisez new au lieu de malloc(). new construira automatiquement l'objet dans la mémoire allouée.

Exemple :

#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
}

Placement nouveau pour la gestion de la mémoire brute

Si la mémoire a déjà été allouée à l'aide de malloc(), il est possible d'utiliser le placement new pour construire l'objet dans cet emplacement. mémoire.

Exemple :

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

Cependant, l'utilisation directe de new est généralement préférable au placement de new pour la construction d'objets.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn