Есть односвязный список и при сравнении елементов появляется ошибка при указании на NULL . Проблема возникает при исполнении функции
CompAndFind
мне необходимо пройтись по списку и найти подходящие елементы, мне кажеться надо сделать зацикливание указателей. Но как мне кажеться ето не лучшее решение
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <cstring>
#include "Header1.h"
using namespace std;
struct OLS
{
int RoomsCount;
int floor;
float square;
struct OLS *ptr;
};
struct OLS *init(int RoomsCount, int floor, float square)
{
struct OLS *lst;
//int RoomsCount, int floor, float square, char*adress
// выделение памяти под корень списка
lst = (struct OLS*)malloc(sizeof(struct OLS));
lst->RoomsCount = RoomsCount;
lst->floor = floor;
lst->square = square;
lst->ptr = NULL; // это последний узел списка
return(lst);
}
struct OLS * addelem(OLS *lst, int RoomsCount, int floor, float square)
{
struct OLS *temp, *p;
temp = (struct OLS*)malloc(sizeof(struct OLS));
p = lst->ptr; // сохранение указателя на следующий узел
lst->ptr = temp; // предыдущий узел указывает на создаваемый
temp->RoomsCount = RoomsCount;// сохранение поля данных добавляемого узла
temp->floor = floor;
temp->square = square;
temp->ptr = p; // созданный узел указывает на следующий элемент
return(temp);
}
void show(OLS*str)
{
cout << "Rooms count: ";
cout << str->RoomsCount << endl;
cout << "Floor:";
cout << str->floor << endl;
cout << "Square:";
cout << str->square << endl;
}
void CompAndFind(OLS*str)
{
struct OLS *p;
p = str;
do {
if(p->RoomsCount==p->ptr->RoomsCount)
{
if(p->floor == p->ptr->floor) {
if (p->square != p->ptr->square)
{
show(p);
}
}
}
p = p->ptr; // переход к следующему узлу
} while (p != NULL);
}
int main()
{
//OLS StructArr[2];
OLS*first; OLS*second; OLS*third;
first = init(4, 4, 2);
second = addelem(first, 4, 5, 4);
third = addelem(second, 2, 4, 30);
//listprint(first);// first because it is root of all list
CompAndFind(first);
system("pause");
return 0;
}