Alan468 Temat założony przez niniejszego użytkownika |
[SFML 2.0] Program Mapa.exe przestał działać. » 2013-07-02 22:00:11 Witam,
Chciałem zapytać czy nagłe zwolnienie sporej ilości różnej maści zmiennych może powodować wyskakiwanie takich błędów? Czy jednak będę musiał poszukać jakiegoś błędu w kodzie? |
|
akwes |
» 2013-07-02 22:05:06 Nie. Ale źle przeprowadzone zwolnienie, czy zwolnienie usuniętych już raz elementów, tudzież używanie usuniętych może to spowodować. |
|
Alan468 Temat założony przez niniejszego użytkownika |
» 2013-07-02 22:09:58 Błąd wyskakuje dopiero w momencie zamknięcia okna RenderWindow w oknie konsoli ... A czy ożycie destruktora w klasie i wywołanie itd mogła by pomóc. |
|
akwes |
» 2013-07-02 22:13:10 Bez przykładu kodu to wróżenie z fusów. Coś jest źle zwalniane albo zwalniane dwa razy skoro tak się zachowuje aplikacja. |
|
Alan468 Temat założony przez niniejszego użytkownika |
» 2013-07-02 22:19:53 Cały kod jest tu
main.cpp:
#include <SFML/Graphics.hpp> #include <string> #include <iostream> #include <fstream> #include <conio.h> #include <sstream> #include "zmienne.h" #include "WczytywaniePliku.h"
using namespace std; using namespace sf;
string IntToStr( int & a ) { Zmienne MZ; MZ.ITS << a; MZ.text = MZ.ITS.str(); return MZ.text; }
int main() { Zmienne MZ; WczytajPlik( MZ ); RenderWindow MapaGry( VideoMode( 1280, 720, 32 ), "Mapa Gry" ); while( MapaGry.isOpen() ) { MZ.X_Myszy = MZ.Zdarzenie.mouseMove.x; MZ.Y_Myszy = MZ.Zdarzenie.mouseMove.y; while( MapaGry.pollEvent( MZ.Zdarzenie ) ) { if( Event::KeyPressed && MZ.Zdarzenie.key.code == Keyboard::Escape ) { MapaGry.close(); } if( MZ.Zdarzenie.type == Event::Resized ) { MapaGry.setSize( Vector2u( 1280, 720 ) ); } if( MZ.Zdarzenie.type == Event::Closed ) { MapaGry.close(); } MZ.Najechano_Na_Pole = 0; for( int y = 0; y <= 648; y = y + 72 ) { for( int x = 0; x <= 648; x = x + 72, MZ.Najechano_Na_Pole++ ) { if(( MZ.X_Myszy > x && MZ.X_Myszy <=( x + 72 ) ) &&( MZ.Y_Myszy > y && MZ.Y_Myszy <=( y + 72 ) ) ) { MZ.Zaznaczenie.setPosition( x, y ); if( MZ.Zdarzenie.type == Event::MouseButtonPressed && MZ.Zdarzenie.mouseButton.button == Mouse::Left ) { MZ.Kliknieto_N_Pole = MZ.Najechano_Na_Pole; MZ.NumerNap.setString( IntToStr( MZ.Kliknieto_N_Pole ) ); MZ.CzyGraczaOdpNap.setString( MZ.Czy_Gracza[ MZ.Kliknieto_N_Pole ] ); MZ.CzyMAtakowacOdpNap.setString( MZ.Czy_M_Atakowac[ MZ.Kliknieto_N_Pole ] ); MZ.NazwaMisjiOdp.setString( MZ.Nazwa_Misji[ MZ.Kliknieto_N_Pole ] ); MZ.CzyWrogaOdpNap.setString( MZ.Czy_Wroga[ MZ.Kliknieto_N_Pole ] ); } } } } } MapaGry.clear(); MapaGry.draw( MZ.TloMapy ); MapaGry.draw( MZ.Zaznaczenie ); MapaGry.draw( MZ.PoleNrNap ); MapaGry.draw( MZ.NumerNap ); MapaGry.draw( MZ.CzyGraczaNap ); MapaGry.draw( MZ.CzyGraczaOdpNap ); MapaGry.draw( MZ.CzyMAtakowacNap ); MapaGry.draw( MZ.CzyMAtakowacOdpNap ); MapaGry.draw( MZ.NazwaMisji ); MapaGry.draw( MZ.NazwaMisjiOdp ); MapaGry.draw( MZ.CzyWrogaOdpNap ); MapaGry.draw( MZ.CzyWrogaNap ); MapaGry.display(); } return 0; }
WczytywaniePliku.h:
#ifndef WczytywaniePliku_H #define WczytywaniePliku_H #include <string> #include <iostream> #include <fstream> #include "zmienne.h" using namespace std;
void WczytajPlik( Zmienne & MZ ) { fstream Plik_Z_Danymi; Plik_Z_Danymi.open( "data/properties.txt", ios::in ); cout << "Wczytywanie danych..." << endl; if( Plik_Z_Danymi.good() == true ) { std::cout << "Uzyskano dostep do pliku!" << std::endl; for( int Nr_Pola = 0; Nr_Pola <= 100; Nr_Pola++ ) { Plik_Z_Danymi >> MZ.Nazwa_Pola[ Nr_Pola ] >> MZ.Czy_Gracza[ Nr_Pola ] >> MZ.Czy_Wroga[ Nr_Pola ] >> MZ.Czy_M_Atakowac[ Nr_Pola ] >> MZ.Nazwa_Misji[ Nr_Pola ]; if( MZ.Nazwa_Pola[ Nr_Pola ] == "endfile" ) { cout << endl << "Przerwano " << endl; Plik_Z_Danymi.close(); break; } } cout << "Wczytano." << endl; Plik_Z_Danymi.close(); } } #endif
zmienne.h:
#ifndef ZMIENNE_H #define ZMIENNE_H
#include <string>
using namespace std; using namespace sf;
class Zmienne { public: Texture tlomapy; Texture zaznaczenie; ostringstream ITS; Sprite TloMapy; Sprite Zaznaczenie; Text PoleNrNap, NumerNap; Text CzyGraczaNap, CzyGraczaOdpNap; Text CzyWrogaNap, CzyWrogaOdpNap; Text CzyMAtakowacNap, CzyMAtakowacOdpNap; Text NazwaMisji, NazwaMisjiOdp; std::string Nazwa_Pola[ 100 ]; std::string Czy_Gracza[ 100 ]; std::string Czy_Wroga[ 100 ]; std::string Czy_M_Atakowac[ 100 ]; std::string Nazwa_Misji[ 100 ]; std::string text; int Najechano_Na_Pole; int Kliknieto_N_Pole; int Wys; int X_Myszy; int Y_Myszy; Event Zdarzenie; Font czcionka; Zmienne(); };
Zmienne::Zmienne() { tlomapy.loadFromFile( "data/DCMI/mapa.bmp" ); TloMapy.setTexture( tlomapy ); zaznaczenie.loadFromFile( "data/DCMI/zaznaczenie.bmp" ); Zaznaczenie.setTexture( zaznaczenie ); czcionka.loadFromFile( "data/czcionka/arial.ttf" ); PoleNrNap.setString( "Pole nr.: " ); PoleNrNap.setPosition( 750, 200 ); CzyGraczaNap.setString( "Czy gracza: " ); CzyGraczaNap.setPosition( 750, 250 ); CzyWrogaNap.setString( "Czy wroga: " ); CzyWrogaNap.setPosition( 750, 300 ); CzyMAtakowacNap.setString( "Czy mozna zatakowac: " ); CzyMAtakowacNap.setPosition( 750, 350 ); NazwaMisji.setString( "Nazwa misji: " ); NazwaMisji.setPosition( 750, 400 ); NumerNap.setPosition( 860, 200 ); CzyGraczaOdpNap.setPosition( 910, 250 ); CzyWrogaOdpNap.setPosition( 910, 300 ); CzyMAtakowacOdpNap.setPosition( 1060, 350 ); NazwaMisjiOdp.setPosition( 920, 400 ); }
#endif
sądzę że w ten sposób będzie łatwiej |
|
akwes |
» 2013-07-02 22:40:53 Wygląda na to, że jest problem ze zwalnianiem zasobów. Ogólnie, z tego co pamiętam, to nie wolno pozyskiwać zasobów sf::Font przed tworzeniem okna i zwalniać po jego zniszczeniu. Spróbuj zamienić miejscami linijki: Zmienne MZ; WczytajPlik( MZ );
RenderWindow MapaGry( VideoMode( 1280, 720, 32 ), "Mapa Gry" );
na RenderWindow MapaGry( VideoMode( 1280, 720, 32 ), "Mapa Gry" );
Zmienne MZ; WczytajPlik( MZ );
przekompiluj, odpal i powiedz czy problem dalej występuje. |
|
MrPoxipol |
» 2013-07-02 22:41:13 Spróbuj sprawdzić debuggerm, w którym miejscu następuje crash tzn. w której lini. |
|
Alan468 Temat założony przez niniejszego użytkownika |
» 2013-07-02 22:51:28 Przeniosłem te linijki i nic ,a przy debugowaniu w rogu ekranu wyskoczyło mi Program received signal SIGSEGV, Segmentation fault. plus jeszcze: #0 02928D81 atioglxx!DrvGetProcAddress() (C:\Windows\SysWOW64\atioglxx.dll:??) #1 02934C59 atioglxx!DrvGetProcAddress() (C:\Windows\SysWOW64\atioglxx.dll:??) #2 0239C1A7 atioglxx!DrvGetProcAddress() (C:\Windows\SysWOW64\atioglxx.dll:??) #3 6E185563 ~WglContext(this=0x5830f0) (D:\developpement\sfml-master\src\SFML\Window\Win32\WglContext.cpp:110) #4 6E181A15 sf::priv::GlContext::globalCleanup() (D:\developpement\sfml-master\src\SFML\Window\GlContext.cpp:119) #5 6E1823F5 ~GlResource(this=0x3940bf8) (D:\developpement\sfml-master\src\SFML\Window\GlResource.cpp:75) #6 68EE2F14 ~Texture(this=0x3940bf8) (D:\developpement\sfml-master\src\SFML\Graphics\Texture.cpp:97) #7 68F99BBF ~Page(this=0x3940be0) (D:/developpement/sfml-master/include/SFML/Graphics/Font.hpp:239) #8 68FE39F4 ~pair(this=0x3940bd8) (d:/programmes/mingw-4.4-sjlj/bin/../lib/gcc/mingw32/4.4.1/include/c++/bits/stl_pair.h:68) #9 68F9A859 __gnu_cxx::new_allocator<std::pair<unsigned int const, sf::Font::Page> >::destroy(this=0x28fc93, __p=0x3940bd8) (d:/programmes/mingw-4.4-sjlj/bin/../lib/gcc/mingw32/4.4.1/include/c++/ext/new_allocator.h:115) #10 68FE8688 std::_Rb_tree<unsigned int, std::pair<unsigned int const, sf::Font::Page>, std::_Select1st<std::pair<unsigned int const, sf::Font::Page> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, sf::Font::Page> > >::_M_destroy_node(this=0x6907f090, __p=0x3940bc8) (d:/programmes/mingw-4.4-sjlj/bin/../lib/gcc/mingw32/4.4.1/include/c++/bits/stl_tree.h:383) #11 68FE9222 std::_Rb_tree<unsigned int, std::pair<unsigned int const, sf::Font::Page>, std::_Select1st<std::pair<unsigned int const, sf::Font::Page> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, sf::Font::Page> > >::_M_erase(this=0x6907f090, __x=0x3940bc8) (d:/programmes/mingw-4.4-sjlj/bin/../lib/gcc/mingw32/4.4.1/include/c++/bits/stl_tree.h:972) #12 68FE8F61 std::_Rb_tree<unsigned int, std::pair<unsigned int const, sf::Font::Page>, std::_Select1st<std::pair<unsigned int const, sf::Font::Page> >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, sf::Font::Page> > >::clear(this=0x6907f090) (d:/programmes/mingw-4.4-sjlj/bin/../lib/gcc/mingw32/4.4.1/include/c++/bits/stl_tree.h:726) #13 68FE3615 std::map<unsigned int, sf::Font::Page, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, sf::Font::Page> > >::clear(this=0x6907f090) (d:/programmes/mingw-4.4-sjlj/bin/../lib/gcc/mingw32/4.4.1/include/c++/bits/stl_map.h:626) #14 68EC277E sf::Font::cleanup(this=0x6907f080) (D:\developpement\sfml-master\src\SFML\Graphics\Font.cpp:385) #15 68EC1C8F ~Font(this=0x6907f080) (D:\developpement\sfml-master\src\SFML\Graphics\Font.cpp:95) #16 68EC25BB __tcf_0() (D:\developpement\sfml-master\src\SFML\Graphics\Font.cpp:332) #17 68EC1086 __dll_exit() (C:\Users\Alan\Desktop\aaaaaaaa\Projekt 1\Projekt\mapa gry\bin\Debug\sfml-graphics-d-2.dll:??) #18 68EC1106 DllMainCRTStartup@12() (C:\Users\Alan\Desktop\aaaaaaaa\Projekt 1\Projekt\mapa gry\bin\Debug\sfml-graphics-d-2.dll:??) #19 771E9950 ntdll!RtlpNtMakeTemporaryKey() (C:\Windows\system32\ntdll.dll:??) #20 00000000 0x68ec0000 in ??() (??:??) #21 00000000 0x00000000 in ??() (??:??) i na koniec Program received signal SIGSEGV, Segmentation fault. In atioglxx!DrvGetProcAddress () (C:\Windows\SysWOW64\atioglxx.dll) Debugger finished with status 0 |
|
« 1 » 2 3 |