c++结构体中包含类对象成员的问题

今天写代码遇到一个问题。以下的结构体:数组

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);

 ref: http://stackoverflow.com/questions/7609981/possible-memory-leak-with-malloc-struct-stdstring-and-freecode

相关文章
相关标签/搜索