Maison >développement back-end >C++ >Comment puis-je allouer correctement de la mémoire pour les structures contenant std::strings en C ?
Gestion des structures avec std::Strings en C : navigation dans l'allocation de mémoire
En C, lorsqu'il s'agit de structures contenant std::strings et en utilisant malloc(), certains pièges peuvent survenir. Prenons l'exemple suivant :
struct example { std::string data; }; int main() { example *ex = (example *)malloc(sizeof(*ex)); ex->data = "hello world"; std::cout << ex->data << std::endl; }
Lors de son exécution, ce programme plante avec une erreur de segmentation. Ce comportement découle de la nature inhérente de malloc() et de la construction de std::strings.
Maldvertising et allocation de mémoire
Contrairement à new, malloc() alloue simplement mémoire brute. Dans ce contexte, tenter d'utiliser la mémoire malloc() comme un objet « réel » peut conduire à des résultats indéfinis. Pour instancier correctement les objets en mémoire, utilisez new au lieu de malloc() :
example *ex = new example;
Tromper malloc() en coopération
Alternativement, en utilisant une combinaison de malloc () et l'opérateur de placement new, il est possible de construire des objets dans la mémoire malloc() :
void *ex_raw = malloc(sizeof(example)); example *ex = new(ex_raw) example;
Cependant, en utilisant ces techniques peut s'avérer inutile dans le cadre de la gestion de structures avec std::strings.
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!