Skocz do zawartości

Problem z usuwaniem iteratora w liście STL wewnątrz pętli


Marcin1147

Rekomendowane odpowiedzi

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);

}

Odnośnik do komentarza
Udostępnij na innych stronach

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++);
}

Odnośnik do komentarza
Udostępnij na innych stronach

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!

motionb.png

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...