Witam
Pogubiłem się totalnie. Proszę o podpowiedź bo nie wiem gdzie leży błąd w toku rozumowania wskaźników.
Problem z linią: symbols_arr[cnt_tmp] = &symbol;
#include <stdio.h>
#include <stdlib.h>
int read_from_file(FILE *pliczek, char ***symbols_arr)
{
// BUFSIZ zdefiniowany w std
char buffLine[BUFSIZ];
int cnt = 0;
int cnt_tmp = 0;
// Czytamy lini po lini
while(fgets(buffLine, sizeof(buffLine), pliczek) != NULL)
{
// Alokujemy pamiec dla symbolu
char *symbol = (char*)malloc(strlen(buffLine) * sizeof(char));
// Kopiujemy do symbolu
memcpy(symbol, buffLine, strlen(buffLine));
// Usuwamy znak nowej linii i konczymy go nullem
symbol[strlen(buffLine)-1] = '\0';
if(!symbol)
{
free(symbol);
perror("Error while allocating memory for symbol\n");
exit(1);
}
// Tworzymy miejsce w pamieci na nowa tablice
char **symbols_tmp = (char**)realloc(*symbols_arr, ++cnt * sizeof(char*));
if(!symbols_tmp)
{
free(symbols_arr);
perror("Error while allocating memory for symbols\n");
exit(1);
}
// Tutaj działa - teraz symbol_arr wskazuje na adres pamięci nowo powstałej tablicy
symbols_arr = &symbols_tmp;
// Tu się sypie kompilator - chce przypisac adres char`a *symbol do "świeżej" tablicy pod indeksem cnt_tmp...
// tak zeby moc miec do niej dostep w main() np: printf("%s\n", symbols[indeks]);
symbols_arr[cnt_tmp] = &symbol;
cnt_tmp++;
}
return cnt;
}
int main()
{
char **symbols = NULL;
FILE *symbols_file = fopen("D:\\kupa.txt", "r");
int symbols_cnt = read_from_file(symbols_file, &symbols);
fclose(symbols_file);
free(symbols);
printf("Done: %d\n", symbols_cnt);
getchar();
return 0;
}