C++中带头节点的动态链表,头节点指针内存分配出错
以下是部分程序//头文件部分typedefintElementType;typedefintPosition;classList{private:structNode{E...
以下是部分程序//头文件部分typedef int ElementType;
typedef int Position;class List
{
private:
struct Node
{
ElementType data;
Node *next;
};
private:
Node *head;
Node *tail;
Node *first;
int mySize;
public:
List();
~List();
void insert(ElementType d, Position pos);
};//类实现部分//构造函数List::List()
{
tail = 0;
head = 0;
first = 0;
first -> next = head;}//插入元素部分void List::insert(ElementType d, Position pos)
{
Node *ptr = new Node;
ptr->data = d;
ptr->next = 0; Node *p = first;
for(int i=0;i!=pos;++i)
{
p = p->next;
}
ptr->next = p->next;
p->next = ptr;
++mySize;
} 主要的问题就是,在构造函数部分一定要先给first分配一块空间,即first = new Node,否则会出错,这是为什么?在插入元素的函数中,用指针p指向first,编译能通过,但是运行中会出错,请问什么原因?如何修改?非常感谢! 展开
typedef int Position;class List
{
private:
struct Node
{
ElementType data;
Node *next;
};
private:
Node *head;
Node *tail;
Node *first;
int mySize;
public:
List();
~List();
void insert(ElementType d, Position pos);
};//类实现部分//构造函数List::List()
{
tail = 0;
head = 0;
first = 0;
first -> next = head;}//插入元素部分void List::insert(ElementType d, Position pos)
{
Node *ptr = new Node;
ptr->data = d;
ptr->next = 0; Node *p = first;
for(int i=0;i!=pos;++i)
{
p = p->next;
}
ptr->next = p->next;
p->next = ptr;
++mySize;
} 主要的问题就是,在构造函数部分一定要先给first分配一块空间,即first = new Node,否则会出错,这是为什么?在插入元素的函数中,用指针p指向first,编译能通过,但是运行中会出错,请问什么原因?如何修改?非常感谢! 展开
2013-06-25
展开全部
如果没有first = new Node的话,就代表first没有指向一段内存,所以你要引用其中的东西肯定会崩溃,指针必须指向内存,不然就是所谓的野指针,而p指向first,意思是p和first指向同一段内存,其实还是没内存不是?所以出错了,记住一点就是指针必须有指向的内存
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-25
展开全部
请问你是用什么编译工具?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询