Chciałem napisać program obliczający iloczyn kartezjański dwóch tablic i zapisujący go w jednej, dwuwymiarowej tablicy w stylu:
tablica[numer][0] - element z pierwszej tablicy
tablica[numer][1] - element z drugiej tablicy
gdzie "numer" to iloczyn elementów z dwóch tablic. To jest kod:
#include <stdio.h>
int* przypisz_iloczyn(int[], int, int[], int);
int main() {
int arr1[4] = {1, 4, 2, 3};
int arr2[4] = {4, 1, 3, 3};
int i, **outcomes = (int **) malloc(sizeof(int*)*2);
for(i = 0; i < 2; i++)
outcomes[i] = (int *) malloc(sizeof(int)*16);
outcomes = przypisz_iloczyn(arr1, 4, arr2, 4);
int j;
for(j = 0; j < 16; j++)
printf("%d", outcomes[j][0]);
getchar();
}
int* przypisz_iloczyn(int tabl1[], int size1, int tabl2[], int size2) {
int count = 0, i, j, g;
int **outcomes = (int **)malloc(sizeof(int*)*2);
for(g = 0; g < 2; g++)
outcomes[g] = (int *) malloc(sizeof(int)*16);
for(i = 0; i < size1; i++) {
for(j = 0; j < size2; j++) {
outcomes[count][0] = tabl1[i];
outcomes[count][1] = tabl2[j];
count++;
}
}
return outcomes;
};
I teraz tak:
-
Jak mam rozumieć alokację pamięci dla dwuwymiarowej tablicy? Kiedy zobaczyłem dwa wskaźniki to wysiadłem. Mógłby ktoś mi to jak najbardziej łopatologicznie wytłumaczyć? ;)
-
Dlaczego ten kod nie działa? Uruchamia się, owszem, ale wywala przy którymś przejściu w zagnieżdżonej pętli w funkcji przypisz_iloczyn().