c++程序,可以通过编译,但是一运行就停止工作。急求助啊!!

#include<iostream>
#include<fstream>
using namespace std;
struct Node
{
int data;
Node *next;
Node *beforep;
Node *afterp;
Node *prev;
Node(int num,Node* nextval){
data=num;
next=nextval;
}
};
int main()
{
ifstream input("input1.txt");
ofstream output("output1.txt");
int i = 0;
Node* head;
Node* fence;
head=new Node(0,NULL);
fence = head;
int a;
while (!input.eof())
{
input>>a;
fence = fence->next->beforep = new Node(a,NULL);
}
fence = head;
for(i=0;i<2;i++){
fence=fence->next->beforep;
}
Node* beforep;
Node* afterp;
Node* p;
beforep = p->prev;
afterp=p->next;
p->next=afterp->next;
beforep->next=afterp;
afterp->prev=p;
p->next->prev=p;
p->prev=afterp;
fence=head;
while(fence->next!=NULL){
fence=fence->next;
output<<fence->data<<' ';
// ofstream output("output1.txt");
}
system ("pause");
return 0;
}
帮看看这个程序可以通过编译,但是一运行就停止工作

你第一次循环的时候这句话会导致崩溃
fence = fence->next->beforep = new Node(a,NULL);

因为第一次循环的时候fence指向的是head,head的next是NULL,对NULL调用fence->next->beforep,会导致程序崩溃。追问

那怎么改呢?

追答

不好意思,这种链表的要改太费时间了,而且你的代码还一眼看不出来目的,还是你自己搞定吧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-22
语法正确编译自然美问题.
但程序第一次运行到这里fence = fence->next->beforep = new Node(a,NULL);的时候
fence就是head吧?
head->next就是NULL, 那么NULL->beforep是个什么东西?
对NULL的调用总是错误的.
不知道你想完成什么功能
第2个回答  2013-03-22
你不妨再重建一个工程,把这些代码复制一下放到这个工程里再运行一下,如果还不行,我就实在无能为力了
第3个回答  2013-03-22
哇 好难 我不会哦