Ошибка сегментации в моем коде SLL Natural Merge Sort в C++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Ошибка сегментации в моем коде SLL Natural Merge Sort в C++

Сообщение Anonymous »

Это мой код SLL Natural Merge Sort на C++:

Код: Выделить всё

#include 
#include 
typedef struct Node{
int data;
Node* link;
}NODE;
typedef struct List{
NODE* first;
NODE* last;
}LIST;
void Init(LIST &l){
l.first = l.last = NULL;
}
NODE* GetNode(int x){
NODE* p;
p = (NODE*)malloc(sizeof(NODE));
if (p==NULL){
printf("Khong du bo nho!"); return NULL;
}
p->data = x;
p->link = NULL;
return p;
}

void AddLast(LIST &l, NODE* new_ele){
if (l.first==NULL){
l.first = new_ele;
l.last = l.first;
}
else {
l.last->link = new_ele;
l.last = new_ele;
}
}
NODE* InsertLast(LIST &l, int x){
NODE* new_ele = GetNode(x);
if (new_ele == NULL){
return NULL;
}
AddLast(l,new_ele);
return new_ele;
}
void AddNumber(LIST &l, int a[], int n){
NODE *p;
for (int i=0; idata);
p = p->link;
}
printf("\n");
}
void DistributeList(LIST &l, LIST &l1, LIST &l2){
NODE *p;
do{
p = l.first;
l.first = p->link; p->link = NULL;

AddLast(l1,p);
}while((l.first)&&(p->datadata));
if (l.first)
DistributeList(l,l2,l1);
else
l.last = NULL;
}
void MergeList(LIST &l, LIST &l1, LIST &l2){
NODE* p;
while ((l1.first)&&(l2.first)){
if (l1.first->datadata){
p = l1.first;
l1.first = p->link;
}
else{
p = l2.first;
l2.first = p->link;
}
p->link = NULL;
AddLast(l,p);
};
if (l1.first){
l.last->link = l1.first;
l.last = l1.last;
}
else if (l2.first){
l.last->link = l2.first;
l.last = l2.last;
}
}
void NaturalMergeSort(LIST &l){
LIST l1, l2;
if (l.first == l.last) return;
Init(l1);
Init(l2);
DistributeList(l,l1,l2);
NaturalMergeSort(l1);
NaturalMergeSort(l2);
MergeList(l,l1,l2);
}
int main(){
LIST l;
Init(l);
int a[] = {12,2,8,5,1,6,4,15};
int n = sizeof(a)/sizeof(a[0]);
AddNumber(l,a,n);
ShowNumber(l);
NaturalMergeSort(l);
ShowNumber(l);
}
Когда я запускаю его, код сообщает об ошибке прямо в этой строке
Здесь сегментация
Код по-прежнему работает нормально при отладке, но когда я вхожу в NaturalMergeSort в функции DistributeList я обнаружил ошибку сегментации в строке AddLast(l1,p).
Это то, что я получил в терминале, когда пытался запустить :
Мой терминал
Я пытался это исправить, но эта ошибка постоянно возникает, пожалуйста, помогите мне ее исправить.

Подробнее здесь: https://stackoverflow.com/questions/787 ... -sort-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»