Błąd przy drugim dostępie do danych

0

Witam serdecznie
Mam problem który bym chyba nazwał tak jak w temacie, otóż program przestaje odpowiadać bez wyrzucania wyjątku podczas drugiej próby dostępu do danych. Za pierwszym razem wyświetla wszystko prawidłowo, drugi raz kończy program
Mam listę dynamiczną w której są jako dane są rekordy. Na każdy element wskazuje także conajmniej jeden element z mojej struktury danych, która jest wygląda jak coś takiego: Rok.miesiac[i]->dzieńmiesiąca[i]->wskaznik->rekord.cos_tam.
<code=c++>
cout<<"Podaj rok:";
cin>>year;
cout<<endl;
cout<<"Podaj miesiac:";
cin>>month;
cout<<endl;
cout<<"Podaj dzien:";
cin>>day;
//************

    if(yeardata.monthofyear[month-1]->dayofmonth[day-1]->event!=NULL)
    {
        cout<<"Oto wydarzenie odbywajace sie tego dnia"<<endl;
        cout<<yeardata.monthofyear[month-1]->dayofmonth[day-1]->event->event.title<<endl;
    }
    else
    {
        cout<<"Tego dnia nic sie nie dzieje. Chcesz cos dodac?"<<endl;
        cout<<"Dodawanie bedzie w nastepnej wersji programu"<<endl;
    }
    //**********
    }
    //**********
Próbowałem przekazywać dane do stringa przed drukowaniem, nie dawało rady.
Próbowałem też przekazywać cały wskaźnik, też nic.
tablice alokuję w ten sposób:
<code=c++>
void Month::allocatedays(Day **&pointer, int days)
    {
        pointer=new Day*[days];
        for(int i=1;i<=days;i++)
        {
            pointer[i-1]=new Day(i);
        }
    }

Z góry dzieki za pomoc

1

Przecież tych krzaków nawet nie da się czytać.
Dlaczego nikt nie odpowiada w moim wątku?

0

<code=c++>
int year,month,day;
cout<<"Zabezpieczenie przed wprowadzeniem glupich danych bedzie w nastepnej wersji"<<endl;
cout<<"Podaj rok:";
cin>>year;
cout<<endl;
cout<<"Podaj miesiac:";
cin>>month;
cout<<endl;
cout<<"Podaj dzien:";
cin>>day;
//************

    if(yeardata.monthofyear[month-1]->dayofmonth[day-1]->event!=NULL)
    {
        cout<<"Oto wydarzenie odbywajace sie tego dnia"<<endl;
        cout<<yeardata.monthofyear[month-1]->dayofmonth[day-1]->event->event.title<<endl;
    }
    else
    {
        cout<<"Tego dnia nic sie nie dzieje. Chcesz cos dodac?"<<endl;
        cout<<"Dodawanie bedzie w nastepnej wersji programu"<<endl;
    }
0
int year,month,day;
        cout<<"Zabezpieczenie przed wprowadzeniem glupich danych bedzie w nastepnej wersji"<<endl;
        cout<<"Podaj rok:";
        cin>>year;
        cout<<endl;
        cout<<"Podaj miesiac:";
        cin>>month;
        cout<<endl;
        cout<<"Podaj dzien:";
        cin>>day;
        //************

        if(yeardata.monthofyear[month-1]->dayofmonth[day-1]->event!=NULL)
        {
            cout<<"Oto wydarzenie odbywajace sie tego dnia"<<endl;
            cout<<yeardata.monthofyear[month-1]->dayofmonth[day-1]->event->event.title<<endl;
        }
        else
        {
            cout<<"Tego dnia nic sie nie dzieje. Chcesz cos dodac?"<<endl;
            cout<<"Dodawanie bedzie w nastepnej wersji programu"<<endl;
        }
 

teraz dobrze jest, sorry bardzo

0

Z tego nie da się niczego sensownego powiedzieć, pokaż cały kod.

0

Tutaj funkcja wypisująca wydarzenie:

void showevent(Year yeardata)
    {
        int year,month,day;
        cout<<"Zabezpieczenie przed wprowadzeniem glupich danych bedzie w nastepnej wersji"<<endl;
        cout<<"Podaj rok:";
        cin>>year;
        cout<<endl;
        cout<<"Podaj miesiac:";
        cin>>month;
        cout<<endl;
        cout<<"Podaj dzien:";
        cin>>day;
        //************

        if(yeardata.monthofyear[month-1]->dayofmonth[day-1]->event!=NULL)
        {
            cout<<"Oto wydarzenie odbywajace sie tego dnia"<<endl;
            cout<<yeardata.monthofyear[month-1]->dayofmonth[day-1]->event->event.title<<endl;
        }
        else
        {
            cout<<"Tego dnia nic sie nie dzieje. Chcesz cos dodac?"<<endl;
            cout<<"Dodawanie bedzie w nastepnej wersji programu"<<endl;
        }
        //**********
    }
 

Alokacja miesięcy:

 
Year::Year(bool ISleap, int first, int weekormonth)
    {
        switch (weekormonth){
        case 1:
            weekofyear=new Week *[52];
            for(int i=1;i<=52;i++)
            {
                weekofyear[i-1]=new Week();
            }
            this->firstdayofyear=first;
            break;
        case 2:
            monthofyear=new Month *[12];
            for(int i=1;i<=12;i++)
            {
                monthofyear[i-1]=new Month(i-1,ISleap);
            }
            break;
        default:
            break;
        }
            this->isleap=ISleap;
    }

Konstruktor dnia oraz funkcja dodająca wskaźnik na event do dnia:

 
Day::Day(int daynumber)
    {
    this->day=daynumber;
    this->event=NULL;
    }
    


    void Day::addEvent(Lista *link)
    {
        this->event=link;
    }

    Day::~Day()
    {
        delete this;
    }

przypisanie wskaźników listy do dni

void createCalendar_year(Lista *list, Year &year)
{
    Lista *tmp=list;
    while(tmp)
    {
       
       year.monthofyear[tmp->event.month-1]->dayofmonth[tmp->event.day-1]->addEvent(tmp);
        tmp=tmp->next;
    }
}
 

No i sama lista i jej rekord

struct events{
    int month;
    int day;
    int year;
    string title;

};
struct Lista{
    events event;
    Lista *next;
    bool isnear();//sprawdza, czy wydarzenie jest nieodległe czasowo.
};
 

Trochę to zagmatwane, ale to mój pierwszy większy projekt (na studia)

1 użytkowników online, w tym zalogowanych: 0, gości: 1