Я пытаюсь инициализировать мои два дважды связанных списков пустым, но моя программа рушится. Программа разделяет четные и нечетные целые числа из текстового файла. Я считаю, что проблема заключается в функции InitializeList, но я пробовал несколько разных вещей безрезультатно. Мне нужно их инициализировать до:Инициализация двух дважды связанных списков C++
Odds->top = NULL;
Odds->length = 0;
Evens->top = NULL;
Evens->length = 0;
Может ли кто-нибудь указать, что я делаю неправильно?
Код:
#include <iostream>
#include <fstream>
#include <cstddef>
#include <stdlib.h>
using namespace std;
struct node{
int integer;
node *next;
node *prev;
};
struct list{
int length;
node *top;
};
bool EmptyList(list* head)
{
bool empty;
if(head == NULL)
empty = true;
else
empty = false;
return empty;
}
list* InitializeList(list* A_list)
{
A_list->top = NULL;
A_list->length = 0;
return A_list;
}
bool OrderedListInsertion(list* &A_list, int number, int &counter)
{
bool repeat,
success;
node *newOdd;
node *newEven;
node *EvenHead;
node *oddHead;
if((number % 2) == 0)
{
A_list = new list;
newEven = new (nothrow) node;
A_list->top = newEven;
if(counter == 0)
{
if(newEven == NULL)
{
cout << "ERROR. Memory allocation failed!" << endl;
success = false;
}
else
{
newEven->integer = number;
newEven->next = NULL;
newEven->prev = NULL;
EvenHead = newEven;
success = true;
}
}
else
{
if(newEven == NULL)
{
cout << "ERROR. Memory allocation failed!" << endl;
success = false;
}
else
{
newEven->integer = number;
newEven->prev = EvenHead;
newEven->next = NULL;
EvenHead = newEven;
success = true;
}
}
}
if((number % 2) != 0)
{
A_list = new list;
if(counter == 0)
{
newOdd = new (nothrow) node;
if(newOdd == NULL)
{
cout << "ERROR. Memory allocation failed!" << endl;
success = false;
}
else
{
newOdd->integer = number;
newOdd->prev = NULL;
oddHead = newOdd;
newOdd->next = NULL;
success = true;
}
}
else
{
newOdd = new (nothrow) node;
if(newOdd == NULL)
{
cout << "ERROR. Memory allocation failed!" << endl;
success = false;
}
else
{
newOdd->integer = number;
newOdd->prev = newOdd;
success = true;
}
}
}
return success;
}
int ReadFirst(list* &Odds, list* &Evens)
{
string file1 = "Int1.txt";
ifstream ReadInts;
int number;
int x = 0,
y = 0;
bool success;
ReadInts.open(file1.c_str());
ReadInts >> number;
do
{
if((number % 2) == 0)
{
success = OrderedListInsertion(Evens, number, x);
if(success)
{
x++;
cout << "Even processed." << endl;
}
else
return 1;
}
if((number % 2) != 0)
{
success = OrderedListInsertion(Odds, number, y);
if(success)
{
y++;
cout << "Odd processed." << endl;
}
else
return 1;
}
ReadInts >> number;
}while(ReadInts);
ReadInts.close();
}
int main()
{
list* Odds;
list* Evens;
Odds = InitializeList(Odds);
Evens = InitializeList(Evens);
ReadFirst(Odds, Evens);
return 0;
}
Программа компилирует, но не отображает ничего, когда она запускается. – joe