char **loadName(FILE *f)
{
char **pole;
free(pole);
vytvorenie a zapisanie do dvojrozmerneho pola...
return pole;
}
V zadaní mám napísane: Ak už bolo pole predtým načítané, je najprv dealokované a potom sa vytvorí nové...
Teda vždy ked zavolám tuto funkciu tak by sa mi malo toto pole dealokovať a vytvoriť nové.
Chcem sa opýtať či to free(pole) je napísané dobre. Či to nemá byť free(*pole), alebo či neni nejaký iný spôsob dealokovania pola. Dik
if(*pole!=NULL)
// toto je OK
free( *pole[i] );
// sa podľa prednosti operátorov sa rozkladá na:
free( *(pole[i]) );
// namiesto očakávaného:
free( (*pole)[i] );
// pretože precedencia [] je vyššia ako pre *
void vyberRiadky(FILE* f, char*** pole_ptr, int* dlzka) {
int i;
//ak pole, ktoré bolo cez pointer predané do funkcie existuje (!= NULL)
if(*pole_ptr != NULL) {
//pre každý prvok poľa ktoré je (*pole_ptr)
for(i = 0;i < *dlzka;i++)
free((*pole_ptr)[i]); //dealokuj
//dealokuj aj pole samotné
free(*pole);
}
/* kód ktory pracuje zo suborom */
//nastav premennú ktorá je (*dlzka) na počet riadkov
*dlzka = ...;
//alokuj pole pre riadky, ulož do (*pole_ptr)
*pole_ptr = (char**)malloc(*dlzka * sizeof(char*));
//a potom už pre každý riadok v poli (*pole_ptr)
for(i = 0;i < *dlzka;i++)
//alokuj miesto pre reťazec
(*pole_ptr)[i] = (char*)malloc(/* veľkost riadka */);
...
}