Witam.
Napisałem pewną funkcję, która korzysta z tablicy wskaźników zadeklarowanej pierwotnie jako 'typ **'. Następnie jest tworzona zmienna lokalna tego samego typu. Za pomocą funkcji malloc() przypisuję jej obszar pamięci zwiększony o 1 * sizeof(typ *), tak że nowa tablica ma jeden element więcej niż stara. przepisuję wskaźniki do nowej oraz wykonuję kilka komend, mających na celu uzupełnienie danych związanych z nowym elementem, ale to nie dotyczy mojego pytania. Na końcu funkcja zmienia adres wskaźnika do tablicy wskaźników w zmiennej przekazanej jako parametr, na adres nowej tablicy, na którą wskazuje zadeklarowana zmienna lokalna. To wygląda tak
int new(struct grupa **tablica, int *i_tab, char *nazwa)
{
/*...*/
struct grupa **nowa_tab; //nowa tablica grup
/*...*/
nowa_tab = (struct grupa **)malloc(sizeof(struct grupa *) * (*i_tab + 1)); //utworzenie tablicy wskaźników do grup powiększonej o 1 rekord
/*...*/
nowa_tab[*i_tab] = (struct grupa *)malloc(sizeof(struct grupa)); //nowa grupa (i_tab nie jest ++, bo pełni funkcję licznika tablicy)
tablica = nowa_tab; //teraz tymczasowa zmienna nowa_tab może zostać skasowana
*i_tab++; //zwiększ licznik tablicy grup
return (0); //koniec
Teraz moje pytanko. Co się dzieje z pamięcią zajmowaną przez starą tablicę wskaźników? Czy mogę uwolnić ją pisząc gdzieś w środku funkcji
free(tablica);
? Czy wtedy nie zostanie zwolniona nie tylko stara tablica, ale również pamięć na którą wskazują wskaźniki będące elementami nowej tablicy, wskazuwana także przez stare? Napisałem krótki programik testowi i doszedłem do wniosku, że nie będę mógł użyć free(), lecz nie jestem przekonany.