今天写代码遇到一个问题。如下的结构体:
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++里这样使用:
1、A *a = new A; //使用 new 会调用成员的构造函数
//。。。
delete a;
或者(待验证)
2、void *v = malloc(sizeof(A));
A *a = new (v)A;
//......
a->~A();
free(v);