zwalnianie dynamicznej pamieci - poprawnie?

0
// 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?
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

1

Tablice sprites:

  1. Tworzysz na [0..amountY]
  2. Przydzielasz dla [0..amountY-1]
  3. Zwalniasz dla [1..amountY]
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.

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