Patzick Temat założony przez niniejszego użytkownika |
Microsoft Visual C++ Runtime Library - wysypywanie sie programu » 2009-05-05 20:40:04 A miało być tak pięknie... :) Stworzyłem sobie opcję wczytywania obiektów które są w pewnej odległości od mego ludka i sprawdzam na nich kolizje, jeśli będą dalej to idą do obiektów nieaktywnych i czekają sobie i liczenie kolizji ich nie obejmuje, lecz jest problem :/ wyskakuje mi powiadomienie z tytułem jak w temacie postu i treścią: This application has requested to terminate it in an unusual way. Please contact the application's support team for more information. Po czym program się zamyka :( Nie wiem czy kod jest potrzebny bo może wiecie co nie tak, ale dodam że jak włączę i przejdę kawałek to dopiero się wysypuje. Tak dziwnie bo jak dojdę do pierwszego obiektu to kolizja normalnie działa czyli funkcja napisana przeze mnie musi spełniać swoją rolę no ale właśnie co jest nie tak? |
|
DejaVu |
» 2009-05-05 20:47:49 To nie jest kwestia visual'a tylko błędu w kodzie. Gdzieś piszesz po pamięci. Skoro używasz visual'a, wybierz rodzaj konfiguracji Debug, użyj magicznego klawisza F5 i wykonaj w aplikacji ten magiczny ruch, który wysypuje Ci aplikację. W Visualu pojawi sie taka żółta strzałeczka po lewej. Następnie z menu opcji uruchom sobie okienko callstack i zobacz sobie w którym miejscu Twojego kodu program Ci się wysypał.
W Visual'u namierzanie takich błędów jest banalne w porównaniu do innych środowisk :) |
|
Patzick Temat założony przez niniejszego użytkownika |
» 2009-05-05 21:59:06 A tu cały myk, że ja Devem kompilowałem :) skoro coś nie tak z kodem to podaję to co trzeba: class CstaticObiekt { public: int x, y, szer, dl; CstaticObiekt( int xp, int yp, int szp, int dlp ); int getX( void ); int getY( void ); int getS( void ); int getW( void ); }; CstaticObiekt::CstaticObiekt( int xp, int yp, int szp, int dlp ) : x( xp ) , y( yp ) , szer( szp ) , dl( dlp ) { }
int CstaticObiekt::getX() { return x; }; int CstaticObiekt::getY() { return y; }; int CstaticObiekt::getS() { return szer; }; int CstaticObiekt::getW() { return dl; };
vector < CstaticObiekt > Sobiekt; vector < CstaticObiekt > Aobiekt;
void GetStaticObiects() { Sobiekt.push_back( CstaticObiekt( 8, 10, 1, 0 ) ); Sobiekt.push_back( CstaticObiekt( 7, 16, 0, 0 ) ); Sobiekt.push_back( CstaticObiekt( 10, 16, 0, 0 ) ); Sobiekt.push_back( CstaticObiekt( 5, 18, 0, 0 ) ); }; void CopyFromStaticToActiv() { int tymx, tymy, tyms, tymw; for( int i = 0; i < Sobiekt.size(); i++ ) { tymx = Sobiekt[ i ].getX(); tymy = Sobiekt[ i ].getY(); if( tymx >= ludek.x - 5 && tymx <= ludek.x + 5 && tymy >= ludek.y - 5 && tymy <= ludek.y + 5 ) { tyms = Sobiekt[ i ].getS(); tymw = Sobiekt[ i ].getW(); Aobiekt.push_back( CstaticObiekt( tymx, tymy, tyms, tymw ) ); Sobiekt.erase( Sobiekt.begin() + i - 1 ); }; }; }; void CopyFromActivToStatic() { int tymx, tymy, tyms, tymw; for( int i = 0; i < Aobiekt.size(); i++ ) { tymx = Aobiekt[ i ].getX(); tymy = Aobiekt[ i ].getY(); if( tymx < ludek.x - 5 && tymx > ludek.x + 5 && tymy < ludek.y - 5 && tymy > ludek.y + 5 ) { tyms = Aobiekt[ i ].getS(); tymw = Aobiekt[ i ].getW(); Sobiekt.push_back( CstaticObiekt( tymx, tymy, tyms, tymw ) ); Aobiekt.erase( Aobiekt.begin() + i - 1 ); }; }; };
GetStaticObiects();
CopyFromStaticToActiv(); CopyFromActivToStatic();
if( key[ KEY_LEFT ] ) { ludek.kierunek = 2; ludek.x--; for( int i = 0; i < Aobiekt.size(); i++ ) { if( kolizja( ludek.x, ludek.y, ludek.s, ludek.w, Aobiekt[ i ].x, Aobiekt[ i ].y, Aobiekt[ i ].szer, Aobiekt[ i ].dl ) == true ) { ludek.x++; } } } Dev nie za bardzo pali się do tego, żeby pokazać mi co jest nie tak...Pomysły? :) |
|
DejaVu |
» 2009-05-05 22:07:11 Ta linijka groźnie wygląda :P Sobiekt.erase( Sobiekt.begin() + i - 1 );
Wykomnentuj wszystkie erase'y i sprawdź czy błąd się powtarza. Jeśli nie to wiesz gdzie leży problem i będzie można ewentualnie pisać dlaczego :) |
|
Patzick Temat założony przez niniejszego użytkownika |
» 2009-05-05 22:37:52 Rzeczywiście to z tym był problem, pomieszało mi się że jak begin wskaże początek i dodam aktualne przeliczanie to o 1 za dużo będzie pokazywać. Teraz idealnie działa :) Dziękuję bardzo i zamykam ;) |
|
« 1 » |