You are on page 1of 1

// DINAMICKE MATRICE

// Zadatak: Treba da napravim matricu tipa char, tj. niz stringova, ali velicina matrice nije poznata.
// Treba da se unosi text sa stdin dok se ne unese prazan string, tj. samo enter. Znaci da svaki red
// matrice predstavlja string. I na kraju, treba da mi se citav tekst ispise na stdout.

// SA GRESKOM

#define korak 5
int main ()
{
    char **note = NULL;
    int duzina = 0, alocirano = 0, i;
    char *c;
    note = malloc(korak *sizeof(char*));
// ili  note = (char**)malloc(korak * sizeof(char*));
   do {
        if (duzina == alocirano) {
            for (i=alocirano; i<alocirano + korak; i++)
                note[i] = malloc(20 *sizeof(char));
            alocirano+=korak;
        }
        c = (char*)malloc(50 * sizeof(char));
        gets(c);
        if (strlen(c) == 0) break;
        strcpy (note[duzina++] , c);
        free (c);
    }while (1);
    for (i=0; i<duzina; i++){
        puts (note[i]);
        free (note[i]);
    }
    free (note);
    return 0;
}

// -----------------------
// ISPRAVKA

// Problem se javlja zato što na početku alociraš samo 5 bloka (korak = 5)


note = (char**)malloc(korak * sizeof(char*));

// a ovaj sledeći kod pokušava da alocira memoriju za string na 6-om mestu kada je duzina = 5,
// a to 6. mesto je ko zna šta u memoriji.
if (duzina == alocirano)
{
  for (i=alocirano; i<alocirano+korak; i++)
    note[i] = malloc(20 * sizeof(char));
  alocirano += korak;
}

// Program lepo radi za 4 ili manje stringova. Dakle, moraš u ovom drugom delu koda da
// namestiš da ti povećava note za još dodatnih 5 bloka (korak).

You might also like