请问包含结构指针的结构体怎么初始化?

snoopy84 2008-03-24 11:41:54
struct Base
{
int a;
int b;
int c;
};

struct Derived
{
int d;
int e;
int f;
base *pb;
};

derived *CreateDerived (void){}
void FreeDerived (derived *pd){}
要求完成这两个函数,并可以使用如下的语句,
Derived *p = CreateDerived();
p->pb->a = 10;
...全文
491 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
laolaoliu2002 2008-03-24
  • 打赏
  • 举报
回复
5楼写的很标准
ryfdizuo 2008-03-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 akirya 的回复:]
C/C++ code


Derived * CreateDerived()
{
Derived *p = (Derived *)malloc( sizeof(Derived) );
p->pb = (Base*)malloc(sizeof(Base));
return p;
}

void FreeDerived(Derived *p)
{
free( p->pb);
free(p);
}
[/Quote]
太乙 2008-03-24
  • 打赏
  • 举报
回复


Derived *CreateDerived (void)
{
return malloc(sizeof(struct Derived));

}
void FreeDerived (Derived *pd)
{
if(pd==null)return;
if(pd->pb!=null)free(pd->pb);
free(pd);
}

Supper_Jerry 2008-03-24
  • 打赏
  • 举报
回复
#include  <iostream> 
using namespace std;
struct Base
{
int a;
int b;
int c;
};

struct Derived
{
int d;
int e;
int f;
Base *pb;
};
Derived *CreateDerived (void)
{
Derived* pD = (Derived*)malloc(sizeof(Derived));
if(pD)
{
pD->pb = (Base*)malloc(sizeof(Base));
return pD;
}
return NULL;
}
void FreeDerived (Derived *pd)
{
if(pd)
{
if(pd->pb)
{
free(pd->pb);
pd->pb = NULL;
}
free(pd);
pd = NULL;
}
}

int main(int argc, char* argv[])
{
Derived *p = CreateDerived();
p->pb->a = 10;
FreeDerived(p);
return 0;
}
使用malloc free
  • 打赏
  • 举报
回复



Derived * CreateDerived()
{
Derived *p = (Derived *)malloc( sizeof(Derived) );
p->pb = (Base*)malloc(sizeof(Base));
return p;
}

void FreeDerived(Derived *p)
{
free( p->pb);
free(p);
}

Supper_Jerry 2008-03-24
  • 打赏
  • 举报
回复
#include  <iostream> 
using namespace std;
struct Base
{
int a;
int b;
int c;
};

struct Derived
{
int d;
int e;
int f;
Base *pb;
};
Derived *CreateDerived (void)
{
Derived* pD = new Derived;
if(pD)
{
pD->pb = new Base;
return pD;
}
return NULL;
}
void FreeDerived (Derived *pd)
{
if(pd)
{
if(pd->pb)
{
delete pd->pb;
pd->pb = NULL;
}
delete pd;
pd = NULL;
}
}

int main(int argc, char* argv[])
{
Derived *p = CreateDerived();
p->pb->a = 10;
FreeDerived(p);
return 0;
}
  • 打赏
  • 举报
回复

Derived * CreateDerived()
{
Derived *p = new Derived;
p->pb = new Base;
return p;
}

void FreeDerived(Derived *p)
{
delete p->pb;
delete p;
}
snoopy84 2008-03-24
  • 打赏
  • 举报
回复
要求用malloc
snoopy84 2008-03-24
  • 打赏
  • 举报
回复
不好意思,各位大侠都应当给分的,下次下次,请别见怪,第一次问问题,呵呵
唐巧 2008-03-24
  • 打赏
  • 举报
回复
在C++中,struct被当成class来编译的,所以也可以写成下面这样,增加构造函数和析构函数:

#include <iostream>
using namespace std;
struct Base
{
int a;
int b;
int c;
};

struct Derived
{
int d;
int e;
int f;
Base *pb;
Derived(){
pb = new Base;
}
~Derived(){
delete pb;
}
};

int main(int argc, char* argv[])
{
Derived *p = new Derived();
p->pb->a = 10;
delete p;
return 0;
}

snoopy84 2008-03-24
  • 打赏
  • 举报
回复
谢谢各位大侠,我结贴了
相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-03-24 11:41
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下