Usuwanie tablicy dwuwymiarowej

0

Cześć :) Mam mam dwie funkcje: tworzącą i usuwającą macierz kwadratową. Czy ktoś mógłby mi wytłumaczyć co robię źle?
Wyskakuje mi coś takiego:
validheappointer

Kod:


 void CreateMatrix ( double*** t, int nSize )
{
	double** tmp = *t = ( double** ) calloc ( nSize, sizeof(double*) );
	for ( int i = 0; i<nSize; i++ )
	{
		*tmp++ = ( double* ) calloc ( nSize, sizeof(double) );
	}
}
void DeleteMatrix ( double*** pTab, int nSize )
{
	double** tmp = *pTab;
	for ( int i = 0; i < nSize; i++ )
	{
		free ( *tmp++ );							
	}
	free ( tmp );									
}
int main ( int argc, char* argv[] )
{

	double** pTab = NULL;
	CreateMatrix ( &pTab, 5 );
	DeleteMatrix ( &pTab, 5 );
	return 0;
}
1

Na końcu powinno być free(*pTab);.

0

A dlaczego jeśli we free w pętli wstawię **pTab++ to wyskakuje to samo?

3

Bo do free masz podać ten sam wskaźnik, który otrzymałeś z malloc, a ty go modyfikujesz.

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