尝试了解如何使用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)?
答案 0 :(得分:0)
您无法复制到未调用构造函数的对象:
a[i] = aaa(); //crash
你可以这样做:
new (a + i) aaa();
a[i] = aaa(); //no crash
如果至少其非静态成员没有普通的默认构造函数,则Class具有非平凡的默认构造函数。在你的情况下,std::string c
没有普通的默认构造函数,所以在这种情况下malloc是不够的。