Witam. Chodzi o czysty C. Program ma z pliku wczytywać liczby do macierzy. Oczywiscie zrobilem malloca wczesniej. Napisałem taką funkcję(zamieszczam tylko jej fragment, bo nie ma znaczenia to co jest dalej):
wpisz_do_tablicy(int **nazwa_tablicy, const char *nazwa_pliku) {
macierz_a = fopen(nazwa_pliku, "r");
while (feof(macierz_a) == 0)
{
x = fgetc(macierz_a);
if ((x >= '0') && (x <= '9'))
{
//printf("mam cyfre!!! %c\n", x);
int liczba = atoi(&x);
my_number = my_number * 10 + liczba;
nazwa_tablicy[i][j] = my_number;
}
fclose(macierz_a);
}
Funkcję wywołuje w main w taki sposób:
int main()
{
char* macierz_a = "macierz_a.txt";
int **tab1;
wpisz_do_tablicy(tab1, macierz_a);
}
Problem mam z pierwszym parametrem. Ma on być nazwą tablicy do której będą wpisywane cyfry. Czyli w mojej funkcji tam gdzie jest "nazwa_tablicy" program ma to zamienić na "tab1". Nie chce mi to zadziałać. Co robię źle ? Próbowałem przed "tab1" dopisywać *, ** albo &. Nie przyniosło to rezultatu.
Visual wywala dokładnie taki błąd:
Exception thrown: read access violation.
nazwa_tablicy was 0xCDDDCDDE.
If there is a handler for this exception, the program may be safely continued.
Zamieszczę ewentualnie malloca:
alokuj_pamiec(int **nazwa_tablicy, int kolumny, int wiersze){
nazwa_tablicy = (int**)malloc(wiersze * kolumny * sizeof(int));
for (int i = 0; i<(kolumny); i++)
{
nazwa_tablicy[i] = (int*)malloc(kolumny * sizeof(int));
}
for (int j = 0; j<(wiersze); j++)
{
nazwa_tablicy[j] = (int*)malloc(wiersze * sizeof(int));
printf("%d", j);
}
i w taki sposób go wywołuje:
int main()
{
int tab1_k = 0;
int tab1_w = 0;
otworz_i_zlicz(macierz_a, &tab1_k, &tab1_w);
alokuj_pamiec(&tab1, tab1_k, tab1_w);
}