我編寫了以下示例程序,但由于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 關注
- 495 瀏覽
添加回答
舉報
0/150
提交
取消