牛骨文教育服务平台(让学习变的简单)
博文笔记

new和delete对结构体分配内存的问题

创建时间:2014-04-18 投稿人: 浏览次数:2309

今天帮小师弟调代码,发现一个问题,他在结构体里面定义了一个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会调用构造函数。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。