IllidanRP Temat założony przez niniejszego użytkownika |
Wskaźniki [C++] » 2014-05-31 09:20:42 Witam mam problem prowdopodobnie ze wskaźnikami. Program przy usuwaniu wskaźników, sypie się. Z tego co ustaliłem na usunięciu wskaźnika do obiektu klasy. #include <iostream> #include <string> #include <fstream> #include <cstring> #include <windows.h>
#include "CLASS\Postac_class.h" #include "CLASS\Enemy_class.h" #include "CLASS\Gracz_class.h" #include "FUNCTION\dmg_func.h" #include "FUNCTION\dmg_si_func.h" #include "FUNCTION\zapisz_func.h" #include "FUNCTION\odczyt_func.h" #include "FUNCTION\print_func.h" #include "FUNCTION\color_func.h" #include "LEVELS\trener_lvl.h" #include "LEVELS\las_lvl.h" #include "LEVELS\dziedziniec_lvl.h" #include "LEVELS\mury_lvl.h" #include "LEVELS\komnaty_lvl.h" #include "LEVELS\finall_lvl.h" #include "FUNCTION\save_func.h" #include "FUNCTION\load_func.h" using namespace std;
int kill() { cin.get(); cin.ignore(); return 0; }
int main() { string imie_gracza; int ID = 0; int * ID_ = & ID; int wyb1; int wyb2; int wyb3; char cwyb1[ 256 ], cwyb2[ 256 ]; bool h = true, handle = true; int flag1 = 0; int * flag1_ =& flag1; int flag2 = 0; int * flag2_ = & flag2; int flag3 = 0; int * flag3_ =& flag3; int flag4 = 0; int * flag4_ =& flag4; int flag5 = 0; int * flag5_ =& flag5; Gracz * gracz_; int * liczba_lini_; int liczba_lini = 0; int * hp_; int hp = 0; int * obr_min_; int obr_min; int * obr_max_; int obr_max; int * gold_; int gold; int * score_; int score; string * name_; string name; bool menu = true; int debug; string debugs; Gracz debugg( 0, 0, 0, 0, 0, 0, "" ); niebieski_mat(); cout << "===============================================================================" << endl << endl; niebieski(); cout << print( " Text_rpg_game v0.2.0d\n\n by Szymon \"Szymi_01\" Oszmana, Jarosław \"Anioł\" Aniołek, Kamil Konofał\n\n" ); niebieski_mat(); cout << "===============================================================================" << endl << endl; standardowy(); while( menu == true ) { zielony(); cout << "MENU:\n\n"; zielony_mat(); do { cout << print( "[1]nowa gra\n" ); cout << print( "[2]wczytaj grę\n" ); cout << print( "[3]tablica wyników\n" ); cout << print( "[0]wyjście\n" ); cout << ">>"; cin >> cwyb2; if( cwyb2[ 0 ] >= 48 && cwyb2[ 0 ] <= 57 ) { wyb2 = cwyb2[ 0 ] - 48; } else { cout << "podaj odpowiedni znak!!!\n"; wyb2 = - 1; } if( wyb2 == 1 || wyb2 == 0 || wyb2 == 2 || wyb2 == 3 ) h = false; } while( h == true ); standardowy(); switch( wyb2 ) { case 1: { niebieski_mat(); cout << "\n\n===============================================================================" << endl << endl; cout << " SAMOUCZEK\n\n"; cout << print( "Witamy w grze.\nSterowanie odbywa się za pomocą klawiatury numerycznej (wyjątkiem nazwa gracza).Wybranie opcji drogi do zamku przekieruje Cię do następnego przeciwnika.\nU trenera istnieje możliwosć ulepszenia swoich statystyk\nPowrót do domu spowoduje zapis progresu gry.\n\n" ); cout << print( "Wszelkie rodzaje menu wyboru będą oznaczone kolorem" ); zielony_mat(); cout << " zielonym.\n"; standardowy(); cout << print( "Walka jest przedstawiona za pomocą koloru" ); czerwony(); cout << " czerwonego"; standardowy(); cout << " oraz"; czerwony_mat(); cout << " czerwonego.\n"; standardowy(); cout << print( "Fabuła, teksty oraz dialogi wyświetlane będą w kolorze" ); bialy(); cout << " bialym,\n"; standardowy(); cout << print( "lub " ); turkusowy_mat(); cout << "turkusowym.\n\n"; niebieski_mat(); cout << "===============================================================================" << endl << endl; standardowy(); bialy(); cout << print( "Tutaj jest kres Twej wędrówki. Docierasz do małej wsi pod zamkiem.\nW powietrzu unosi sie zapach stęchlizny." ); cout << print( " Ludzie spoglądają na Ciebie złowrogo.\nKierujesz się w stronę miejscowej tawerny. " ); cout << print( "Wchodzisz i zaczepia Cię\nkarczmarz, z kuflem miejscowego browaru w ręku. Mowi:\n" ); cout << print( "\"Witaj podróżniku, jak Ci na imię?\"\n\n" ); siwy(); cout << ">> "; cin >> imie_gracza; standardowy(); cout << endl; bialy(); cout << print( "Wciska Ci do ręki kufel i gestem dłoni zaprasza do stolika. Po kilku kuflach\nna koszt firmy opowiada Ci o krainie, do której przybyłeś:\n" ); cout << print( "\"Tutaj... tutaj nie ma miejsca dla bohaterów, czy ludzi dobrych. Nasz pan,\nCzarny Lord, tak każe się zwać, nie jest wymarzonym władcą. " ); cout << print( "Widzę, że jesteś\nwojownikiem. Może Tobie uda się go pozbyć.\"\n" ); cout << print( "Ty, przechylając kufel, wypijając piwo mówisz:\n" ); cout << print( "\"Zostanę tutaj przez jakis czas. Może się zaintersuję.\"\n" ); cout << print( "Karczmarz wskazuje Ci pewnego mężczyznę w ciemnym płaszczu, siedzącego samotnie w kącie.\nMówi:\n" ); cout << print( "\"To miejscowy kowal, alchemik, wojownik, mag i doskonały trener. Udaj się do\nniego, napewno pomoże Ci za drobną opłatą.\"\n" ); cout << print( "Wstajesz i wolnym, chwiejnym krokiem udajesz się na miejsce spoczynku.\nZwęszywszy złoto i sławe, postanawiasz uporać się z niedobrym władcą.\n\n\n" ); turkusowy(); cout << " -- ETAP 1 --\n\n"; turkusowy_mat(); cout << print( "Droga do zamku prowadzi przez mroczny las, w którym wielu śmiałków wyzionęło\njuż ducha. Poczynając od groźnych zwierząt, po nieznane twory natury. Przed\npodróżą w te nieznane strony warto podszkolić swoje umiejętności i wyposażyć\nsię w lepszy oręż.\n\n" ); standardowy(); Gracz gracz( ID, 100, 5, 10, 100, 0, imie_gracza ); gracz_ = & gracz; ID++; while( handle == true && gracz.Give_STATE() == true ) { do { niebieski_mat(); cout << "===============================================================================" << endl << endl; standardowy(); zielony(); cout << print( "Gdzie chcesz się udać?\n\n" ); zielony_mat(); cout << print( "[1] W stronę zamku, czas stanąć oko w oko z przeznaczeniem.\n[2] Do trenera, przydałoby się trochę podszkolić.\n[0] Wróć do rodzinnego domu, to nie na Twoje nerwy.\n" ); zielony_mat(); cout << ">> "; cin >> cwyb1; cout << endl; if( cwyb1[ 0 ] >= 48 && cwyb1[ 0 ] <= 57 ) { wyb1 = cwyb1[ 0 ] - 48; } else { wyb1 = - 1; } switch( wyb1 ) { case 0: h = false; break; case 1: h = false; break; case 2: h = false; break; default: cout << print( "Błędne dane. Spróbuj jeszcze raz. \n\n" ); } } while( h == true ); switch( wyb1 ) { case 1: if( flag1 < 5 ) las_lvl( gracz_, ID_, ID, flag1, flag1_ ); else if( flag2 < 5 ) dziedziniec_lvl( gracz_, ID_, ID, flag2, flag2_ ); else if( flag3 < 5 ) mury_lvl( gracz_, ID_, ID, flag3, flag3_ ); else if( flag4 < 5 ) komnaty_lvl( gracz_, ID_, ID, flag4, flag4_ ); else if( flag5 == 0 ) { finall_lvl( gracz_, ID_, flag5_ ); handle = false; } break; case 2: Trener( gracz_ ); break; case 0: handle = false; break; } } if( gracz.Give_STATE() == true ) { if( flag5 == 0 ) { niebieski_mat(); cout << "===============================================================================" << endl << endl; turkusowy_mat(); cout << print( "Uznając że zadanie Cię przerasta, wracasz do domu." ); standardowy(); if( Save_func( gracz_, flag1, flag2, flag3, flag4, flag5 ) == true ) { zielony(); cout << print( "\nZAPISANO STAN GRY!!!" ); } else { czerwony(); cout << print( "\nBŁĄD PRZY ZAPISYWANIU STANU GRY!!!" ); } standardowy(); } else { niebieski_mat(); cout << "===============================================================================" << endl << endl; turkusowy_mat(); cout << print( "GRATULACJE!!! Włśnie ukończyłaś/eś tą gre !!!\n" ); if( Zapisz_func( gracz.Give_name(), gracz.Give_score() ) == true ) { zielony(); cout << print( "Zapisano Twój wynik." ); standardowy(); } else { czerwony(); cout << print( "Podczas zapisywania wyniku nastąpił błąd" ); standardowy(); } standardowy(); } } else { niebieski_mat(); cout << "===============================================================================" << endl << endl; czerwony_mat(); cout << print( "Właśnie poznałeś smak śmierci...\n" ); if( Zapisz_func( gracz.Give_name(), gracz.Give_score() ) == true ) { zielony(); cout << print( "Zapisano Twój wynik." ); standardowy(); } else { czerwony(); cout << print( "Podczas zapisywania wyniku nastąpił błąd" ); standardowy(); } } } break; case 3: { liczba_lini_ =& liczba_lini; Odczyt_func( liczba_lini_, 1 ); break; } case 2: { liczba_lini_ = & liczba_lini; Odczyt_func( liczba_lini_, 0 ); cout << print( "który stan gry chcesz wczytać?\n" ); do { cout << ">>"; cin >> wyb3; if( wyb3 < 1 or wyb3 > liczba_lini ) { cout << print( "błędna liczzba" ); } } while( wyb3 < 1 or wyb3 > liczba_lini ); hp_ = & hp; obr_min_ =& obr_min; obr_max_ =& obr_max; gold_ =& gold; score_ =& score; name_ =& name; wyb3--; Load_func( wyb3, ID_, hp_, obr_min_, obr_max_, gold_, score_, name_, flag1_, flag2_, flag3_, flag4_, flag5_ ); Gracz gracz( ID, hp, obr_min, obr_max, gold, score, name ); gracz_ = & gracz; ID++; while( handle == true && gracz.Give_STATE() == true ) { do { niebieski_mat(); cout << "===============================================================================" << endl << endl; standardowy(); zielony(); cout << print( "Gdzie chcesz się udać?\n\n" ); zielony_mat(); cout << print( "[1] W stronę zamku, czas stanąć oko w oko z przeznaczeniem.\n[2] Do trenera, przydałoby się trochę podszkolić.\n[0] Wróć do rodzinnego domu, to nie na Twoje nerwy.\n" ); zielony_mat(); cout << ">> "; cin >> cwyb1; cout << endl; if( cwyb1[ 0 ] >= 48 && cwyb1[ 0 ] <= 57 ) { wyb1 = cwyb1[ 0 ] - 48; } else { wyb1 = - 1; } switch( wyb1 ) { case 0: h = false; break; case 1: h = false; break; case 2: h = false; break; default: cout << print( "Błędne dane. Spróbuj jeszcze raz. \n\n" ); } } while( h == true ); switch( wyb1 ) { case 1: if( flag1 < 5 ) las_lvl( gracz_, ID_, ID, flag1, flag1_ ); else if( flag2 < 5 ) dziedziniec_lvl( gracz_, ID_, ID, flag2, flag2_ ); else if( flag3 < 5 ) mury_lvl( gracz_, ID_, ID, flag3, flag3_ ); else if( flag4 < 5 ) komnaty_lvl( gracz_, ID_, ID, flag4, flag4_ ); else if( flag5 == 0 ) { finall_lvl( gracz_, ID_, flag5_ ); handle = false; } break; case 2: Trener( gracz_ ); break; case 0: handle = false; break; } } if( gracz.Give_STATE() == true ) { if( flag5 == 0 ) { niebieski_mat(); cout << "===============================================================================" << endl << endl; turkusowy_mat(); cout << print( "Uznając że zadanie Cię przerasta, wracasz do domu." ); standardowy(); cout << "tu"; if( Save_func( gracz_, flag1, flag2, flag3, flag4, flag5 ) == true ) { zielony(); cout << print( "\nZAPISANO STAN GRY!!!" ); } else { czerwony(); cout << print( "\nBŁĄD PRZY ZAPISYWANIU STANU GRY!!!" ); } standardowy(); } else { niebieski_mat(); cout << "===============================================================================" << endl << endl; turkusowy_mat(); cout << print( "GRATULACJE!!! Włśnie ukończyłaś/eś tą gre !!!\n" ); if( Zapisz_func( gracz.Give_name(), gracz.Give_score() ) == true ) { zielony(); cout << print( "Zapisano Twój wynik." ); standardowy(); } else { czerwony(); cout << print( "Podczas zapisywania wyniku nastąpił błąd" ); standardowy(); } } } else { niebieski_mat(); cout << "===============================================================================" << endl << endl; czerwony_mat(); cout << print( "Właśnie poznałeś smak śmierci...\n" ); if( Zapisz_func( gracz.Give_name(), gracz.Give_score() ) == true ) { zielony(); cout << print( "Zapisano Twój wynik." ); standardowy(); } else { czerwony(); cout << print( "Podczas zapisywania wyniku nastąpił błąd" ); standardowy(); } standardowy(); } } break; case 0: { menu = false; break; } } } gold_ =& debug; score_ =& debug; hp_ =& debug; obr_min_ =& debug; obr_max_ =& debug; ID_ =& debug; name_ =& debugs; gracz_ =& debugg; delete hp_; delete obr_min_; delete obr_max_; delete gold_; delete score_; delete name_; delete liczba_lini_; delete gracz_; delete ID_; delete flag1_; delete flag2_; delete flag3_; delete flag4_; delete flag5_; kill(); }
sprawidzłem debugerem i o to co wyświetla: ntdll!RtlGetCompressionWorkSpaceSize() ntdll!RtlGetCompressionWorkSpaceSize() msvcrt!free() ??() main() SOURCE/main.cpp 431
program się kompiluje, jeśli bedzie potrzebny cały to proszę napisać na tego maila: jarekani@gmail.com z chęcią podeśle paczkę. dodam, że wcześniej przed wstawieniem pętli while: while(menu==true), wszystko działało. Pozdrawiam i liczę na szybką pomoc IllidanRP EDIT: problem rozwiązany. wystarczyło nadać ślepym wskaźnikom adres NULL. zamykam |