Witam. Mam problem z programem ktory dostalem na projekt. Mam zrobic kalkulator macierzy logicznych. Rozmiar macierzy ma byc podawany przez uzytkownika, w zwiazku z czym wymyslilem 2 rozwiazania:
1.ustalenie maksymalnego wymiaru tablicy poprzez zadeklarowanie gotowych tablic statycznych 2-wymiarowych.
2.skorzystanie z funkcji malloc i dynamicznych tablic.
Ciekawosc kazala mi wybrac druga opcje i mam problemy. Stworzylem program, caly w main(), ktory za pomoca malloca tworzyl macierz, pozwalal wczytac i wypisac jej zawartosc. Po podzieleniu programu na funkcje, sprawa sie rypla. Mimo dlugiego glowkowania nie udalo mi sie rozwiazac problemu z 'segmentation fault' w momencie wywolania funkcji wczytujacej. Goraco prosze o pomoc niedoswiadczonemu. Prosze tylko o wytkniecie bledu i wskazanie rozwiazania. Kody:
Dzialajacy, niepodzielony na fukcje:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int **macierza,**macierzb,tmp;
int i,j,n;
scanf("%d",&n);
/*tworzenie*/
macierza = malloc(n * sizeof (char));
for (i=0;i<n;i++)
{
macierza[i] = malloc(n * sizeof (char));
}
for (i=0; i<n; ++i)
{
for (j=0; j<n; ++j)
{
scanf("%d",&*(*(macierza+i)+j));
}
}
for (i=0; i<n; ++i)
{
for (j=0; j<n; ++j)
{
printf("%d\n",*(*(macierza+i)+j));
}
}
return 0;
}
Niedzialajacy, podzielony na funkcje:
#include <stdio.h>
#include <stdlib.h>
void tworzenie(int **macierz, int n);
void wczytywanie(int **macierz, int n);
void wypisywanie(int **macierz, int n);
int main()
{
int **macierza,**macierzb,**macierzc;
int n,wybor;
/*switch (wybor)
{
case 1: {wczytywanie(macierza,n); break;}
case 2: {wczytywanie(macierzb,n); break;}
case 3: {dzialanie(*/
scanf("%d",&n);
tworzenie(macierza,n);
wczytywanie(macierza,n);
wypisywanie(macierza,n);
return 0;
}
/*TWORZENIE*/
void tworzenie(int **macierz, int n)
{
int i;
macierz =(int**)malloc(n*( sizeof **macierz));
for (i=1;i<n+1;i++)
{
macierz[i] =(int*)malloc(n*( sizeof *macierz));
}
}
/*WCZYTYWANIE*/
void wczytywanie(int **macierz, int n)
{
int i,j;
for (i=1; i<n+1; ++i)
{
for (j=1; j<n+1; ++j)
{
scanf("%d",&*(*(macierz+i)+j));
}
}
}
/*WYPISYWANIE*/
void wypisywanie(int **macierz, int n)
{
int i,j;
for (i=1; i<n+1; ++i)
{
for (j=1; j<n+1; ++j)
{
printf("%d\n",*(*(macierz+i)+j));
}
printf("\n");
}
}
Bardzo prosze o pomoc. Z gory dzieki:]