robul21 Temat założony przez niniejszego użytkownika |
[SDL] Rosnąca pamięć. » 2013-05-01 15:37:30 Witam Mam problem z funkcją poniżej, cały czas rośnie mi pamięć i to w szybkim tempie, nie mogę znaleźć w którym miejscu. Na razie ma być wyświetlany tylko jakby stoper, ale po niecałych dwóch minutach, brakuje już pamięci. #include "chemia.h" void chema( SDL_Surface * ekran ) { bool wyjscie = false, wystartowac = false; SDL_Event zdarzenie; int mychaX, mychaY; SDL_Rect pole[ 5 ], naCzas[ 3 ]; uzupelnijWspolrzedneCH( pole, naCzas ); SDL_Surface * plansza = SDL_LoadBMP( "chemia.bmp" ); SDL_Surface * start = SDL_LoadBMP( "start_chemia.bmp" ); SDL_Surface * Pczas = NULL; SDL_Color kolor; kolor.r = 0; kolor.g = 0; kolor.b = 0; TTF_Font * font = TTF_OpenFont( "banana.ttf", 60 ); unsigned long long int * wczas, * wtemp, * wmin, * wsekDz, * wsek, czas = 0, temp = 0, min = 0, sekDz = 0, sek = 0; wczas = & czas; wtemp = & temp; wmin = & min; wsekDz = & sekDz; wsek = & sek; string Sczas; ostringstream Oczas; SDL_BlitSurface( plansza, NULL, ekran, NULL ); SDL_BlitSurface( start, NULL, ekran, & pole[ 4 ] ); SDL_Flip( ekran ); while( !wyjscie ) { while( SDL_PollEvent( & zdarzenie ) ) { if( zdarzenie.type == SDL_QUIT ) { wyjscie = true; } if( zdarzenie.type == SDL_MOUSEMOTION ) { mychaX = zdarzenie.motion.x; mychaY = zdarzenie.motion.y; } if( zdarzenie.type == SDL_MOUSEBUTTONDOWN ) { if( zdarzenie.button.button == SDL_BUTTON_LEFT ) { if( mychaX >= pole[ 4 ].x && mychaX <= pole[ 4 ].x + pole[ 4 ].w && mychaY >= pole[ 4 ].y && mychaY <= pole[ 4 ].y + pole[ 4 ].h ) { if( wystartowac == false ) { * wczas = clock(); } wystartowac = true; SDL_Flip( ekran ); } if( wystartowac ) { SDL_BlitSurface( plansza, & pole[ 4 ], ekran, & pole[ 4 ] ); SDL_Flip( ekran ); } } } } if( wystartowac == true ) { SDL_FreeSurface( ekran ); SDL_BlitSurface( plansza, NULL, ekran, NULL ); wyswietlCzas( wczas, wtemp, wmin, wsekDz, wsek, ekran, naCzas, Sczas, Oczas, plansza, kolor, font, Pczas ); } } SDL_FreeSurface( plansza ); SDL_FreeSurface( start ); return; }
void wyswietlCzas( unsigned long long int * czas, unsigned long long int * temp, unsigned long long int * min, unsigned long long int * sekDz, unsigned long long int * sek, SDL_Surface * ekran, SDL_Rect tutaj[ 3 ], string Sczas, ostringstream & Oczas, SDL_Surface * plansza, SDL_Color kolor, TTF_Font * font, SDL_Surface * Pczas ) { * temp = 0, * min = 0, * sekDz = 0, * sek = 0; SDL_BlitSurface( plansza, & tutaj[ 0 ], ekran, & tutaj[ 0 ] ); SDL_BlitSurface( plansza, & tutaj[ 1 ], ekran, & tutaj[ 1 ] ); SDL_BlitSurface( plansza, & tutaj[ 2 ], ekran, & tutaj[ 2 ] ); * temp = clock() - * czas; Oczas.str( "" ); * min = * temp / 60000; Oczas << * min; Sczas = Oczas.str(); Pczas = TTF_RenderText_Solid( font, Sczas.c_str(), kolor ); SDL_BlitSurface( Pczas, NULL, ekran, & tutaj[ 0 ] ); Oczas.str( "" ); * sekDz =((( * temp / 1000 ) -* min * 60 ) / 10 ); Oczas << * sekDz; Sczas = Oczas.str(); Pczas = TTF_RenderText_Solid( font, Sczas.c_str(), kolor ); SDL_BlitSurface( Pczas, NULL, ekran, & tutaj[ 1 ] ); Oczas.str( "" ); * sek =( * temp / 1000 ) % 10; Oczas << * sek; Sczas = Oczas.str(); Pczas = TTF_RenderText_Solid( font, Sczas.c_str(), kolor ); SDL_BlitSurface( Pczas, NULL, ekran, & tutaj[ 2 ] ); SDL_FreeSurface( Pczas ); SDL_Flip( ekran ); return; } |