Итак, я занимаюсь домашним заданием в структурах данных, и более двух часов я в тупике. Чтобы объяснить, мне нужно текстовые файлы ListJava и ListDS, где я беру информацию в формате: Имя Фамилия NUM. Оба файла содержат одни и те же имена, но не одинаковые. Назначение в основном требует от нас объединить сортировку файлов.C++ | Объединение списков ссылок
Это мои структуры:
typedef struct student
{
string name;
string surname;
int am;
int grade;
}StudentFile;
typedef struct node {
StudentFile element;
struct node* next;
}Node;
typedef struct stud
{
string name;
string surname;
int am;
int grade;
int grade2;
struct stud* next;
}Student;
А вот моя функция, где я их объединить:
/*Merge Lists into one*/
Student* MergeLists(Node* headDS, Node* headJava, Student* head)
{
bool flag = false;
Student *a = new Student;
Student *prev = NULL;
Student *temp = NULL;
Node *tempDS = headDS;
Node *tempJava = headJava;
Node *prevJava = NULL;
if (head == NULL)
{
head = a; //mermory alocation for head<Student>
temp = head;
// temp->next = NULL;
}
while (tempDS != NULL)
{
if(head != NULL)
{
if (tempDS->element.surname.compare(tempJava->element.surname) == 0) // if surnames are equal
{
prev = temp;
temp->name = tempDS->element.name;
temp->surname = tempDS->element.surname;
temp->am = tempDS->element.am;
temp->grade = tempDS->element.grade;
temp->grade2 = tempJava->element.grade;
tempJava = tempJava->next;
tempDS = tempDS->next;
temp = temp->next;
flag = false; //meaning that prevJava can get a new value again.
}
else // if DS > Java
{
/*Keep tempJava in mermory while iterating through the next nodes to find the temp that is equal to DS*/
if (flag == false)
{
prevJava = tempJava;
tempJava = tempJava->next;
flag = true;
}
else
{
tempJava = tempJava->next;
}
}
/*temp = temp->next;
tempJava = tempJava->next;
tempDS = tempDS->next;*/
}
prev->next = a;
}
a->next = NULL;
return a;
}
Проблема заключается в температуре = TEMP-> следующей строки. Хотя первый запуск совершенно нормально, а затем правильно ищет ListJava найти равное имя к значению ListDS Темп является 0xcdcdcdcd {...} и он бросает мне исключение:
Exception thrown at 0x00C38EF0 in Exercise3_zitima2.exe: 0xC0000005: Access violation reading location 0xCDCDCDE5.
Как я противостоять этой ошибки , Я действительно искал вокруг судимых вещей здесь и там, но ничего не получается. Я знаю, что это не место, чтобы попросить кого-то решить мое задание, конечно, просто нужно небольшое руководство.
Просто примечание, хотя оно работает, вам не нужно делать 'typedef struct student {} StudentFile; вместо этого вы можете сделать' struct StudentFile {}; '- он более понятен и работает почти так же. Об этом больше говорится в [этом сообщении] (http://stackoverflow.com/a/612350/887210). – ColGraff
^Это действительно информативно! Спасибо за обмен :) – NickCh