我编写了以下示例程序,但由于segfault崩溃。问题似乎与在结构中使用malloc和std::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)。
3 回答
慕村9548890
TA贡献1884条经验 获得超4个赞
malloc
在C ++中,您不能使用具有非平凡构造函数的类。您得到的malloc
是一块原始内存,其中不包含正确构造的对象。任何尝试将该内存用作“真实”对象的尝试都会失败。
代替malloc
-ing对象,使用new
example *ex = new example;
malloc
通过使用以下步骤序列,也可以强制您的原始代码使用:malloc
首先是原始内存,然后是在该原始内存中构造对象:
void *ex_raw = malloc(sizeof(example));example *ex = new(ex_raw) example;
new
上面使用的形式称为“新放置”。但是,您的情况并不需要所有这些技巧。
- 3 回答
- 0 关注
- 467 浏览
添加回答
举报
0/150
提交
取消