Wycieki pamięci

Wycieki pamięci
RO
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:6
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:

Kopiuj
std::list<Missile*> missilesList;

dodawanie pojedynczego elementu:

Kopiuj
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:

Kopiuj
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ź.

Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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 :)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
RO
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:6
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.
n0name_l
w tym kodzie co dales nie powinno byc zadnego wycieku.
IE
  • Rejestracja:prawie 13 lat
  • Ostatnio:ponad 7 lat
  • Postów:32
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.

edytowany 1x, ostatnio: Ieoia
RO
  • Rejestracja:około 12 lat
  • Ostatnio:ponad 11 lat
  • Postów:6
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 :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.