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
Libérer: 2024-12-01 09:47:12
original
697 Les gens l'ont consulté

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
}
Copier après la connexion

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'
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal