Witam, mam do napisania funkcje o następującej treści:
void destroy(int ***ptr);
Funkcja zwalnia pamięć przydzieloną na zbiór danych i ustawia wartość wskaźnika *ptr na NULL. W przypadku przekazania wartości NULL w parametrze ptr funkcja ma nie podejmować żadnej akcji.
Moja funkcja wygląda następująco:
void destroy(int ***ptr){
if (ptr == NULL || *ptr == NULL) {
return;
}
int i = 0;
while (*(ptr+i) != NULL) {
free(*(ptr+i));
i++;
}
free(*ptr);
*ptr = NULL;
}
W tej lini:
free(*(ptr+i));
Testy zwracają mi błąd SIGHEAP
Próba zwolnienia niezaalokowanego wcześniej bloku pamięci (nieznany wskaźnik)
Nie do końca rozumiem działanie potrójnych wskaźników przez co też nie wiem jaki błąd popełniam w tym kodzie. Byłabym wdzięczna za wskazówkę.
Z góry dziękuję.