含有指针的结构体初始化

xiuxiu1017 2013-05-17 03:02:00
struct C_Node
{
LONG lID;
BYTE bDieCt;
CHAR cNode[16];
UINTPnt pnt;
INT iF;
INT iG;
INT iH;
struct C_Node *pFather;


//1
C_Node()
{
memset(this, 0, sizeof(C_Node));
}

//2
C_Node()
{
this->lSegmentID = 0;
this->bDieCt = 0;
memset(this->cNode,0,16);
memset(&(this->pnt),0,sizeof(UINTPnt));
this->iF = 0;
this->iG = 0;
this->iH = 0;
this->pnodeFather = new C_Node;
}

//3
C_Node():lSegmentID(0),bDieCt(0),cNode(0),pnt(0),iF(0),iG(0),iH(0),pnodeFather(NULL)
{

}
};

习惯于在结构体定义的时候进行初始化,对于含有定义的结构体指针的初始化有疑问,以上三种方法都有问题
1 pFather指针还是野指针,在使用定义的时候单独进行初始化
2 这种写法就有问题,调试的时候直接std::stack分配出错
3 编译通不过

求高手指导,改这样写?希望讲一下机制
...全文
262 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Jackie_Zhu 2013-05-18
lz变量名貌似没定义么。。。第一种第二种是可以的,第三种数组的初始化不对
  • 打赏
  • 举报
回复
xiuxiu1017 2013-05-18
	RC_Node():lSegmentID(0),bDierct(0),cNode(0),pnt(0),iF(0),iG(0),iH(0),pnodeFather(NULL)
	{
		memset(this, 0, sizeof(RC_Node));
	}
我这里编译报错:error C2536: “RC_Node::RC_Node::cNode”: 无法指定数组的显式初始值设定项
  • 打赏
  • 举报
回复
hugett 2013-05-18
引用 5 楼 xiuxiu1017 的回复:
3 这种写法,编译就通不过
引用 4 楼 hugett 的回复:
第三种cNode数组放在函数中初始化就可以了。。

	C_Node():lSegmentID(0),bDieCt(0),pnt(0),iF(0),iG(0),iH(0),pnodeFather(NULL){
		memset(cNode, 0 ,sizeof(cNode));
	}    
这样通不过编译??
  • 打赏
  • 举报
回复
xiuxiu1017 2013-05-18
引用 1 楼 rocktyt2 的回复:
2 最后一行无限递归了 3 本质上和1一样,就是cNode是数组不能直接用一个0来初始化 这种结点本来就不应该在初始化的时候就分配好下一个结点的,应该构造好结点再指过去,你的理解就有问题
初始化用第一种就可以,然后使用的时候进行赋值,这样理解对吗?
  • 打赏
  • 举报
回复
xiuxiu1017 2013-05-18
引用 3 楼 zhao4zhong1 的回复:
“变量赋值”和“变量初始化”不是一回事! “变量赋值”发生在运行期,其写法遵循赋值语法规定。 “变量初始化”发生在编译期或运行期,其写法遵循初始化列表语法规定。
我也知道““变量赋值”和“变量初始化”不是一回事” 但是c++中=的重载,放在这里就搞不清楚了, 麻烦zhao4zhong1帮忙讲解一下吧
  • 打赏
  • 举报
回复
xiuxiu1017 2013-05-18
3 这种写法,编译就通不过
引用 4 楼 hugett 的回复:
第三种cNode数组放在函数中初始化就可以了。。
  • 打赏
  • 举报
回复
hugett 2013-05-17
第三种cNode数组放在函数中初始化就可以了。。
  • 打赏
  • 举报
回复
赵4老师 2013-05-17
“变量赋值”和“变量初始化”不是一回事! “变量赋值”发生在运行期,其写法遵循赋值语法规定。 “变量初始化”发生在编译期或运行期,其写法遵循初始化列表语法规定。
  • 打赏
  • 举报
回复
Bird_New 2013-05-17
引用 1 楼 rocktyt2 的回复:
2 最后一行无限递归了 3 本质上和1一样,就是cNode是数组不能直接用一个0来初始化 这种结点本来就不应该在初始化的时候就分配好下一个结点的,应该构造好结点再指过去,你的理解就有问题
cNode可以用\0初始化一下!
  • 打赏
  • 举报
回复
rocktyt 2013-05-17
2 最后一行无限递归了 3 本质上和1一样,就是cNode是数组不能直接用一个0来初始化 这种结点本来就不应该在初始化的时候就分配好下一个结点的,应该构造好结点再指过去,你的理解就有问题
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言

6.2w+

社区成员

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