今天帮小师弟调代码,发现一个问题,他在结构体里面定义了一个string类型,定义了几个结构体指针并用malloc分配了内存。
struct Emplyee
{string m_strName;
bool m_bMale;
int m_nAge;
int m_nSalary;
struct Emplyee *next;
};
struct Emplyee *h = new struct Emplyee()/*(struct Emplyee*)malloc(sizeof(struct Emplyee))*/;
cout<<sizeof(*h)<<" "<<sizeof(Emplyee)<<endl;
cin>>h->m_strName;
cout<<"name:"<<h->m_strName<<endl;
分配了32个字节的内存,但从输入字符获取h->m_strName时,程序挂掉了。我后来用new分配了内存,程序就可以运行了。在网上找了一下资料,发现是malloc分配内存时,不调用构造函数生成对象,而string这样的类必须要调用构造函数生成对象,故没有生成string实例,不能对其赋值。而new会调用构造函数。