zwalnianie dynamicznej pamieci - poprawnie?

zwalnianie dynamicznej pamieci - poprawnie?
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
// Tworzenie:
size_t amountY = level_height / block_height;
sf::Sprite** sprites;

sprites = new sf::Sprite* [amountY + 1];
	for (unsigned y = 0; y < amountY; ++y)
		sprites[y] = new sf::Sprite[amountX + 1];

// usuwanie:
	for (unsigned y = amountY; y != 0; --y) 
		delete[] sprites[y];
	delete[] sprites;

  1. Witam, czy poprawnie zwalniam pamieć dynamiczną?
  2. Kiedy używać std::vector, a kiedy własnej, dynamicznej tablicy?
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
1
  1. Źle. Robisz off-by-one. Nie ma elementu sprites[amountY] za to jest sprites[0]. Więc próbujesz usuwać za dużo z jednej strony i za mało z drugiej.
  2. Zawsze kontenery
  3. Nigdy* własne zarządzanie

*no chyba że wiesz co robisz i jest to dobrze umotywowane

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
1

Tablice sprites:

  1. Tworzysz na [0..amountY]
  2. Przydzielasz dla [0..amountY-1]
  3. Zwalniasz dla [1..amountY]
xxx_xx_x
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 365
0
  1. Jeżeli dynamiczna == częsta zmiana wymiarów to lepiej używaj kontenera, jeżeli po prostu alokowany stały rozmiar ale określony w czasie działania aplikacji to tablica.

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.