今天写代码遇到一个问题。以下的结构体:数组
struct A { string str; int data; //.... };
在代码中须要动态为这个结构体分配内存,习惯性的:
A *a = (A *)malloc(sizeof(A));
而后为 str 赋值输出:函数
a->str = "testdata"; cout << a->str << endl;
结果直接 Segment Fault!了。
google下,原来是调用 malloc 并不调用string的构造函数,致使 str 未初始化。要避免这样的问题,用 C 的方式可使用字符数组(char *str),或者在 C++里这样使用:google
一、A *a = new A; //使用 new 会调用成员的构造函数 //。。。 delete a;
或者(待验证)spa
二、void *v = malloc(sizeof(A)); A *a = new (v)A; //...... a->~A(); free(v);