Usuwanie dwuwymiarowej tablicy wskaźników

0

Witam, pisze sobie mały program do rysowania i mam problem z usunięciem dynamicznej tablicy wielopoziomowej.

Deklaracja:

SPixel **m_pImage;

Tak wygląda alokacja:

m_pImage = new SPixel*[m_sizeImage.x];

for (int i = 0; i < m_sizeImage.x; i++)
{
	m_pImage[i] = new SPixel[m_sizeImage.y];
} 

A tak próbuje ją usunąć:

for (int i = 0; i < m_sizeImage.x; i++)
{
	for (int j = 0; j < m_sizeImage.y; j++)
	{
		delete m_pImage[j];
	}
	delete[] m_pImage[i];
}

delete[] m_pImage;

Niestety wywala program na delete[] m_pImage[i]; a jak dla testu zakomentuję tę linie to wtedy wywala przy delete m_pImage[j];

Co robie źle?

4
  1. Smrodek od inkrementacji: http://4programmers.net/Forum/1101404
  2. Ma być tyle samo delete co new, to co zwraca każdy z new dostaje delete, czyli:
for(int x=0;x<m_sizeImage.x;++x) delete[] m_pImage[x];
delete[] m_pImage;
  1. Przeważnie wiersze to y więc radziłbym:
m_pImage = new SPixel*[m_sizeImage.y]; 
for(int y=0;y<m_sizeImage.y;++y) m_pImage[y]=new SPixel[m_sizeImage.x];

oraz:

for(int y=0;y<m_sizeImage.y;++y) delete[] m_pImage[y];
delete[] m_pImage;
1

Tak jak napisała osoba powyżej.
Plus rozważ:

vector<vector<SPixel>> pixels(m_sizeImage.y, vector<SPixel>(m_sizeImage.x));

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