typedef struct {
                char **linie;   /* linie */
                int n;          /* ile linii jest w tej chwili */
                int wlk;        /* na ile linii mam miejsce */
} * sklad_t;

[...]

#define SKLAD_NA_DZIENDOBRY 512

sklad_t inicjuj_sklad( void ) {
        sklad_t nowy = malloc( sizeof *nowy );
        
        if( nowy == NULL )
                return NULL;

        nowy->linie = malloc( SKLAD_NA_DZIENDOBRY * sizeof * nowy->linie );

        if( nowy->linie == NULL ) {
                free( nowy );
                return NULL;
        }

        nowy->n = 0;
        nowy->wlk = SKLAD_NA_DZIENDOBRY;

        return nowy;
}

static int powieksz_sklad( sklad_t s ) 
{
        char** nl = realloc( s->linie, s->wlk*2 * sizeof *nl );
        if( nl == NULL )
                return 0;
        s->wlk *= 2;
        return 1;
}      

Mam taki fragment kodu z wykładu, wyjęty z programu wybierającego linie z pliku tekstowego i sortującego je. Nie rozumiem, czemu w funkcji powieksz_sklad operujemy na char* nl*, który istnieje tylko wewnątrz funkcji i nie jest ani zwracany, ani przypisywany. Czy nie powinno być tak jak poniżej?

static int powieksz_sklad( sklad_t s ) 
{
        char** nl = realloc( s->linie, s->wlk*2 * sizeof *nl );
        if( nl == NULL )
                return 0;
        s->linie = nl; // tutaj zmiana
        s->wlk *= 2;
        return 1;
}      

A, i czemu w funkcji inicjuj_sklad mamy w malloc'u coś takiego SKLAD_NA_DZIENDOBRY * sizeof * nowy->linie? Konkretniej chodzi mi o to, czemu alokujemy pamięć dla danej liczby elementów nowy->linie, czy nie powinien w tym miejscu być inny obiekt? W sumie jeszcze trochę mi się miesza obsługa tablic wielowymiarowych, więc to pytanie może być głupie.