funkcje tworzące tablice dynamiczne

0

Witam,
wydaje mi się, że jest ok, ale czy byłby ktoś tak miły i sprawdził czy moje funkcje do tworzenia dynamicznych tablic dwu wymiarowych działają poprawnie - szczególnie jeśli chodzi o zwalnianie pamięci bo tego nie mogę w żaden sposób sam zweryfikować.

	double**array2D(int x, int y)
	{
		double** wsk = new double*[x];
		for(int i=0;i<x;i++)
			wsk[i] = new double[y];	//utworzyło nam tablice[x][y];
	return wsk;
	}
	
	void array2Ddelete(double ** tab, int x)
	{
		for(int i=0; i<x; i++)
			delete[] tab[i];	//czy na pewno wszystko się prawidłowo skasuje?
		delete[] tab;			//j.w.
	}

	void main()
	{
		int x = 3;
		int y = 2;

		double ** tablica = array2D(x,y);
		//...
		array2Ddelete(tablica,x);//tu powinno być x a nie y prawda?

	_getch();
}

ok, jeden błąd już znalazłem :) powinno być:

void array2Ddelete(double **& tab, int x)
0

Jest ok, ale skoro zmieniłeś array2Ddelete na void array2Ddelete(double **& tab, int x) (co nie było konieczne) to po usunięciu całej tablicy daj tab = NULL; dzięki temu będzie od razu wiadomo, że tablica jest usunięta i wskaźnik już nie pokazuje na nic sensownego.

0

Super! dzięki za sprawdzenie.
Dla pewności to powinno być tak:

void Ddelete2D(double ** tab, int x) //zmieniłem nazwę bo tamta była za długa :P
        {
                for(int i=0; i<x; i++)
                        delete[] tab[i];
                delete[] tab;
                tab = 0;
        }
0

grr - znowu opuściłem "&"

0

Jeżeli opuścisz & to przypisanie tab = 0 nie będzie widoczne na zewnątrz - zmieniasz kopię wskaźnika, a nie sam wskaźnik. Zamiast 0 lepiej napisać NULL - od razu widać intencję autora kodu - tak jak nie powinno się stosować magic numbers(http://en.wikipedia.org/wiki/Magic_number_(programming)#Unnamed_numerical_constants).

btw. jak się zarejestrujesz będziesz mógł edytować swoje posty

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