Marcin1147 Opublikowano 19 Stycznia 2010 Opublikowano 19 Stycznia 2010 Hej, pisze sobie w C++ taki, hmmm... Motion-blur, i mam problem z usuwaniem iteratorów z listy STL w pętli "for". Gdy zakomentuję pogrubioną linijkę kodu to blur działa, gdy nie to dostaje errora: list iterator is not incrementable... Pomóżcie. struct MotionBlur { float x,y; int alpha; }; list<MotionBlur> motion; list<MotionBlur>::iterator motion_iter; HTEXTURE syf; hgeSprite *objmotion; void co_sekunde() { MotionBlur tmp; tmp.x=krolik->x; tmp.y=krolik->y; tmp.alpha=150; motion.push_front(tmp); } for(motion_iter=motion.begin();motion_iter!=motion.end();motion_iter++) { if((*motion_iter).alpha>0) { (*motion_iter).alpha-=10; objmotion->SetColor(ARGB( (*motion_iter).alpha ,255,255,255),-1); objmotion->Render( (*motion_iter).x , (*motion_iter).y); } else motion.erase(motion_iter); }
PsichiX Opublikowano 19 Stycznia 2010 Opublikowano 19 Stycznia 2010 for(motion_iter=motion.begin();motion_iter!=motion.end();) { if(motion_iter->alpha>0) { motion_iter->alpha-=10; objmotion->SetColor(ARGB( motion_iter->alpha ,255,255,255),-1); objmotion->Render( motion_iter->x , motion_iter->y); motion_iter++; } else motion.erase(motion_iter++); }
Marcin1147 Opublikowano 19 Stycznia 2010 Autor Opublikowano 19 Stycznia 2010 Ok, działa - a jak zwolnić pamięć po tworzonej co sekundę strukturze? O, tej: void co_sekunde() { MotionBlur tmp; tmp.x=krolik->x; tmp.y=krolik->y; tmp.alpha=150; motion.push_front(tmp); } Chodzi mi o coś w stylu: void co_sekunde() { MotionBlur tmp; tmp.x=krolik->x; tmp.y=krolik->y; tmp.alpha=150; motion.push_front(tmp); memory_free(tmp); } EDIT: BTW. Dzięki, wygląda nawet nieźle!
PsichiX Opublikowano 19 Stycznia 2010 Opublikowano 19 Stycznia 2010 kasując obiekt z listy usuwasz też ten właściwy obiekt, jeśli lista nie przechowuje wskaźników, więc nie potrzebujesz nic więcej zwalniać. A obiekt lokalny tmp jest automatycznie kasowany z pamięci przy wyjściu z funkcji.
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się