При исполнении getCategory(), getHeading() в методе out теряются значения всех полей объектов board. Буду рад указанию на ошибки, приводящие к этому

#pragma once
#include<stdio.h> 
#include<stdlib.h> 
#include<iostream>
using namespace std;
class board
{
public:
   board();
   ~board();
   void setCategory(char c[]);
   void setHeading(char c[]);
   void setDate(char c[]);
   void setContact(char c[]);
   void setText(char c[]);
   char* getCategory();
   char* getHeading();
   char* getDate();
   char* getContact();
   char* getText();
private:
   char* category;
   char* heading;
   char* text;
   char* date;
   char* contact;
};
class list {
public:
   void setParams();
   void sort(list* d);
   list* init();
   void addElem(list* d);
   void out();
   list* next = NULL; 
   list* prev = NULL;
   board obj;
   int Id();
   int getCount();
   int decreaseCount();
private:
   static int count;
};
board::~board(void)
{
   delete[] category;
   delete[] heading;
   delete[] date;
   delete[] contact;
   delete[] text;
}
board::board()
{
   category =  new char[15];
   heading = new char[15];
   date = new char[11];
   contact = new char[12];
   text = new char[50];
};
void board::setCategory(char c[])
{
   category = c;
};
void board::setHeading(char c[])
{
    heading = c;
};
void board::setDate(char c[])
{
    date = c;
};
void board::setContact(char c[])
{
    contact = c;
};
void board::setText(char c[])
{
    text = c;
};
void list::setParams()
{
    char f[8]="Selling";
    char c[15]="Garage";
    char g[12]="15.10.2015";
    char e[13]="79567856432";
    char t[100]="I am selling a new garage";
    obj.setCategory(f);
    obj.setHeading(c);
    obj.setDate(g);
    obj.setContact(e);
    obj.setText(t);
};
char* board::getCategory()
{
    return category;
};
char* board::getHeading()
{
    return heading;
};
char* board::getContact()
{
    return (contact);
};
char* board::getDate()
{
    return (date);
};
char* board::getText()
{
    return (text);
};
list* list::init()//инициализация
{
   Id();
   list* lst= new list;
   lst->next = NULL; // указатель на следующий узел
   cout << "Введите параметры корня:"<<endl;
   lst->setParams();
   lst->prev = NULL; // указатель на предыдущий узел
   return(lst);
}
void list::addElem(list* c)//принимает указатель на элемент, после которого надо добавить новый элемент
{//Путаются указатели на поля объекта
   list* temp = new list;
   if (c->next==NULL)
   {
       temp->setParams();
       temp->next = NULL;
       c->next = temp;
       temp->prev = c;
       Id();
   }
   else
   {
       list* p;
       temp ->init();
       p = c->next; // сохранение указателя на следующий узел
       c->next = temp; // предыдущий узел указывает на создаваемый
       cout << "Введите параметры нового узла: " << endl;
       temp->setParams();
       temp->next = p; // созданный узел указывает на следующий узел
       temp->prev = c; // созданный узел указывает на предыдущий узел
       p->prev = temp;   
   }
}
void list::out()
{
   list* l=this;
   while (true)
   {
       if (l->prev != NULL)
       {
           l = l->prev;
       }
       else break;
   }
   for (int i = 0; i < getCount(); i++)
   { 
       cout << "Категория объявления: " <<l->obj.getCategory()<<endl;
       cout << "Рубрика объявления: " << l->obj.getHeading() << endl;
       cout << "Контактный телефон: " << l->obj.getContact() << endl;
       cout << "Дата подачи объявления:" << l->obj.getDate() << endl;
       cout << "Текст объявления:" << l->obj.getText() << endl;
       l = l->next;
   }
};
int list::Id()
{
    int c1;
    c1=++count;
    return c1;
}
int list::getCount()
{
    int c1;
    c1 = count;
    return c1;
}
int list::decreaseCount()
{
    int c1;
    c1 = count--;
    return c1;
}
int list::count = 0;
int main()
{
   setlocale(LC_ALL, "Russian");
   list* Ap= new list;
   Ap=Ap->init();
   Ap->addElem(Ap); 
   Ap->addElem(Ap);
   Ap->next->out();  //тут ошибка
   return 0;
}

Ответы (0 шт):