malloc()用于结构对象数组

时间:2018-01-23 16:02:46

标签: c++ malloc

尝试了解如何使用C风格在C ++中管理内存:

struct aaa{
public:
    int a ;
    int b ;
    std::string c ;
};

int asize =5;

int main() 
{
    aaa * a;
    a = static_cast<aaa *>(malloc(sizeof(aaa) * asize));
    for (int i;i<asize;i++)
    {
        a[i] =  aaa(); //crash
    }
    a[0].c = "ddd";
    a[1].c = "ccc";
    a[2].c = "eee";
}

在第一个内存段中创建结构对象时程序崩溃。我做错了什么(除了在C ++中做C)?

1 个答案:

答案 0 :(得分:0)

您无法复制到未调用构造函数的对象:

a[i] =  aaa(); //crash

你可以这样做:

new (a + i) aaa();
a[i] =  aaa(); //no crash

如果至少其非静态成员没有普通的默认构造函数,则Class具有非平凡的默认构造函数。在你的情况下,std::string c没有普通的默认构造函数,所以在这种情况下malloc是不够的。