猿问

当malloc()-相同结构时如何在结构中使用C ++字符串?

我编写了以下示例程序,但由于segfault崩溃。问题似乎与在结构中使用mallocstd::strings有关。

#include <iostream>#include <string>#include <cstdlib>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吗?

谢谢,博达·西多(Boda Cydo)。


芜湖不芜
浏览 469回答 3
3回答

慕村9548890

malloc在C ++中,您不能使用具有非平凡构造函数的类。您得到的malloc是一块原始内存,其中不包含正确构造的对象。任何尝试将该内存用作“真实”对象的尝试都会失败。代替malloc-ing对象,使用newexample&nbsp;*ex&nbsp;=&nbsp;new&nbsp;example;malloc通过使用以下步骤序列,也可以强制您的原始代码使用:malloc首先是原始内存,然后是在该原始内存中构造对象:void&nbsp;*ex_raw&nbsp;=&nbsp;malloc(sizeof(example));example&nbsp;*ex&nbsp;=&nbsp;new(ex_raw)&nbsp;example;new上面使用的形式称为“新放置”。但是,您的情况并不需要所有这些技巧。
随时随地看视频慕课网APP
我要回答