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.