Dwuwymiarowe tablice

0

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:

  1. 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ć? ;)

  2. 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().

0
  outcomes = przypisz_iloczyn(arr1, 4, arr2, 4);


`outcomes` jest typu `int**`, a funkcja zwraca `int*`. Kompilować się pewnie kompiluje, ale świadczy o tym że przestałeś wszystko ogarniać.
Zaorać, napisać od początku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1