Bład w programie? [działania na zbiorach]

0

Mam do napisania program na zaliczenie ktory wykonuj operacje na zbiorach, jedna z tych operacji jest obliczenie iloczynu kartezjanskiego. I wlasnie ona jest glownym problemem :/ Podczas jej wyswietlania program sie wywala.
Program jest dosc dlugi (jak dla mnie :P ) wiec wrzuce tylko to co mam wrazenie ze powoduje blad, jak cos to moge wrzucic calosc.

A wiec:

int *iloczyn_kartezjanski(int *zbior_a, int *zbior_b) {
    int i, j;
    int *zbior;
    zbior[0]=0;
    zbior = (int *)malloc(1*sizeof(int));
    for(i=1;i<=zbior_a[0];i++) {
        for(j=1;j<=zbior_b[0];j++) {
            zbior[0]++;
            zbior = (int *)realloc(zbior,(zbior[0]+1)*sizeof(int));
            zbior[zbior[0]]=zbior_a[i];
            zbior[0]++;
            zbior = (int *)realloc(zbior,(zbior[0]+1)*sizeof(int));
            zbior[zbior[0]]=zbior_b[j];
        }
    }
    return zbior;
}
                    int *zbior;
                    int i;
                    zbior = iloczyn_kartezjanski(zbior_a, zbior_b);

                    for(i=1;i<zbior[0];i=i+2) {
                        printf("(%d, %d), ", zbior[i], zbior[i+1]);
                    }
                    free(zbior);

Program wywala sie tylko wtedy gdy w drugiej czesci kodu jest printf().

Pierwszym elementem tablicy zbior jest liczba elementow zbioru, a nastepne liczby to elementy tego zbioru.

Mam nadzieje ze ktos rozkmini czemu mi to nie dziala bo ja juz nie mam do tego sily :P

0
int *zbior;
zbior[0]=0; //zbior nie jest zainicjalizowany 
zbior = (int *)malloc(1*sizeof(int));
  1. Przy realokacji pamięci zawsze zwiększaj bufor razy 2, a nie o stały czynnik.

  2. Nie możesz napisać tego w C++?

  3. Nie zadziała np. iloczyn_kartezjanski(iloczyn_kartezjansk(zbior_a,zbior_b), iloczyn_kartezjansk(zbior_c,zbior_d))

0

Wielkie dzieki za pomoc, chyba wczoraj bylem zbyt zmeczony ze tego z 1. nie zauwazylem :P

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