Wycieki pamięci

0

Witam, jest to pierwszy mój post na tym forum więc proszę o wyrozumiałość :)
Moje pytanie brzmi, czy usuwanie elementów z listy w ten sposób powoduje wycieki pamięci?
Jest to lista obiektów typu użytkownika.

deklaracja:

std::list<Missile*> missilesList;

dodawanie pojedynczego elementu:

void MainGame::shoot(SDL_Surface* screen){
		if((150+missileTimer->getTicks())<=0){
		soundsPlayer->playSingleChunk("src/sounds/Spaceship/shooting.wav");
		player.x = playerX;
		player.y = playerY;
		missilesList.push_back(new Missile(player,screen));
		missileTimer->start();
	}
}

usuwanie elementów z listy:

for(unsigned int i=0; i<enemyMissilesList.size();i++){
			enemyMissilesList.back()->draw(clipNumber);

			if(playerSpaceShip->isCollisionDetected(enemyMissilesList.back()->getMissileCoords())){
				soundsPlayer->playSingleChunk("src/sounds/Spaceship/hit.wav");
				delete enemyMissilesList.back();
				enemyMissilesList.pop_back();
			}else if(enemyMissilesList.back()->getMissileY()>screen->h){
				delete enemyMissilesList.back();
				enemyMissilesList.pop_back();
			}else{
				enemyMissilesList.push_front(enemyMissilesList.back());
				enemyMissilesList.pop_back();
			}
		}

Z góry dziękuję za odpowiedź.

0

A czy zawsze dla każdej rakiety wykona się delete? Jeśli tak, to wycieku nie ma. Zresztą co za problem? Uruchom valgrinda i zobacz :)

0
  1. Tak dla każdej, jeżeli wyskoczy poza ekran albo trafi w przeciwnika to zostanie usunięta.
  2. Valgrind = Linux, niestety korzystam z windowsa :)
  3. Używam Eclipse CDT + kompilator mingw, przez co mam problem z innymi detektorami wycieków.
  4. Teoretycznie wycieku nie powinno być, jednakże w monitorze systemu aplikacja rośnie jak szalona.
1

Upewnij się, że to na pewno tu leży problem. Na początek, jeśli nie potrafisz/nie chcesz korzystać z żadnych valgrindów etc. po prostu wykomentuj kod, który według Ciebie powoduje problem. Potem jeżeli wyciek zniknie to komentuj coraz mniejsze bloki kodu i zobacz gdzie leży problem.

Możesz także przyjrzeć się temu linkowi: http://msdn.microsoft.com/en-us/library/x98tx3cf.aspx

Możliwe, że funkcje poboczne (playSingleChunk?) powodują wyciek.

[Edit]: Zobacz też, czy w destruktorze klasy Missle niszczysz wszystkie zasoby przez nią utworzone.

0

Dzięki Wielkie! okazało się, że rzeczywiście w metodzie playSingleChunk doszło do wycieku, a nie brałem jej wcale pod uwagę przy szukaniu przyczyny :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1