自己写的一个链表程序,用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修改后一切运行正常