Skocz do zawartości

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


Rekomendowane odpowiedzi

Opublikowano

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

}

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

Opublikowano

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

Opublikowano

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.

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ę...