在dev c++上可以运行,但是在oj上出现segmentation fault,求解是什么原因
#include<iostream>
#include<stdlib.h>
using namespace std;
struct Node{
int data;
Node* next;
};
typedef Node* List;
int InitList(List &list){
list=(Node*)malloc(sizeof(Node));
list->next=NULL;
}
int DestroyList(List &list){
List p1,p2;
p1=list;
while(list->next!=NULL){
p2=p1->next;
free(p1);
p1=p2;
}
free(p1);
}
int AddNode(List &list,int data){
Node *p=list,*newnode;
newnode=(Node*)malloc(sizeof(Node));
newnode->next=NULL;
newnode->data=data;
while(p->next!=NULL){
p=p->next;
}
p->next=newnode;
}
void PrintList(const List &list){
Node *p=list;
while (p->next!=NULL){
cout<<p->next->data<<" ";
p=p->next;
}
cout<<endl;
}
List MergeList(const List &listA,const List &listB){
List listC;
InitList(listC);
List p1=listA,p2=listB;
while(p1->next!=NULL&&p2->next!=NULL){
if(p1->next->data>=p2->next->data){
AddNode(listC,p2->next->data);
p2=p2->next;
}
else{
AddNode(listC,p1->next->data);
p1=p1->next;
}
}
if(p1->next==NULL){
while(p2->next!=NULL){
AddNode(listC,p2->next->data);
p2=p2->next;
}
}
else{
while(p1->next!=NULL){
AddNode(listC,p1->next->data);
p1=p1->next;
}
}
return listC;
}
int main(){
int m,n;
cin>>m>>n;
List listA,listB;
InitList(listA);
InitList(listB);
for(int i=0;i<m;i++){
int v;cin>>v;
AddNode(listA,v);
}
for(int i=0;i<n;i++){
int v;cin>>v;
AddNode(listB,v);
}
List listC=MergeList(listA,listB);
PrintList(listC);
DestroyList(listA);
DestroyList(listB);
DestroyList(listC);
return 0;
}