VS2013链表读取内存失败,链表套链表

1 篇文章 0 订阅
1 篇文章 0 订阅

自己写的一个链表程序,用GCC编译正常运行,用VS2013一直报异常。终止,调试了很久,终于发现了错误。

class Person
{
private:    
	char secNum[10];
	...
public:
	Person();
	void setSecNum(const char a[]);
	void setBirth(const char a[]);
	...
};

class State
{
private:
	char name[6];
	LinkPerson lp;
public:
	State();
	...
};

typedef struct tagStateNode{
	State key;
	struct tagStateNode * next;
}StateNode,*pStateNode;
class LinkState{
private:
	pStateNode head;
	pStateNode tail;
	int number;
public:
	LinkState();
	...
};
 
 
typedef struct tagNode{
	Person key;
	struct tagNode *next;
}Node,*pNode;
 
class LinkPerson{
private:
	pNode head;
	pNode tail;
	int number;
public:
	LinkPerson();
	bool push(const Person&);
	...
};
 
在main 函数中
定义 LinkState linkstate;
然后 linkstate.push(const Person&); //输入一个Person对象到linkstate一个state里面的linkperson链表里面
VS2013报错,GCC运行正常
 
调试发现原因 过程中都使用的(pNode) malloc(sizeof(Node));和
(pStateNode) malloc(sizeof(StateNode));来建立链表
由于linkstate是一个对象,定义LinkState linkstate;调用了默认构造函数,linkstate中的head 和tail都被初始化为NULL了
但是每个state节点中的linkperson却是用malloc(sizeof(Node));分配出来的,无法调用构造函数,因此出现了这个运行错误
找了很久,最终发现不适用(pStateNode)malloc(sizeof(StateNode));,而使用temp = new StateNode();,这样就调用了State key
的构造函数,使State key中的LinkPerson lp;得到了初始化,lp中的head和tail为NULL
修改后一切运行正常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值