Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Dinamicka Alokacija Matrice

[es] :: C/C++ programiranje :: C/C++ za početnike :: Dinamicka Alokacija Matrice

[ Pregleda: 4499 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

TomaROGM
RAF
Beograd

Član broj: 199831
Poruke: 5
*.static.ikomline.net.



Profil

icon Dinamicka Alokacija Matrice07.02.2009. u 21:48 - pre 184 meseci
Treba mi pomoc oko dinamicke alokacije matrice.Matrica je tipa char, u stvari niz stringova. Pokusavao sam da da koristim "realloc" ali nikako da proradi. Konacno sam nesto uradio sa "malloc", ali ima cudan problem. Kad god se odradi alociranje sa malloc, poremeti se prvi string, tj. prvi red u matrici. Evo kod:
Code:

#define korak 5
int main ()
{
    char **note = NULL;
    int duzina = 0, alocirano = 0, i;
    char *c;
    note = 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;
}

Ako neko zna u cemu je problem ili neko drugo resenje za alociranje matrice kojoj je nepoznata duzina (a da je tipa char) bio bih zahvalan na pomoci.

EDIT: X Files : Molim Vas da zbog preglednosti i potencijalnog razlikovanja ITALIC od "indeks od i", kod upisujete između tag-ova predviđenih za to:

[code] /* ... */ [/code]
 
Odgovor na temu

Aleksandar Ilić
Software Developer
Beograd

Član broj: 15867
Poruke: 417

Sajt: www.ailic.rs


+3 Profil

icon Re: Dinamicka Alokacija Matrice08.02.2009. u 17:25 - pre 184 meseci
Funkcija malloc vraća pokazivač na void i on treba da se kastuje u željeni. Četvrti red u main funkciji ne valja, treba ovo:
Code:
note = (char**)malloc(korak * sizeof(char*));
Na dalje nisam stigo da pogledam, verovatno ima sličnih grešaka. Trenutno sam malo u žurbi, a i ne razumem tačno šta hoćeš da uradiš. Objasni precizno šta pokušavaš da uradiš, pa ću ti pomoći večeras kad se vratim.


Poz.
„Naposletku, suština saznavanja nije u tome gubimo li igru, već kako je gubimo,
šta time spoznajemo, čemu nas je poraz naučio i kako nas to menja. Gubiti na određen
način znači - dobijati.”

Richard Bach
 
Odgovor na temu

TomaROGM
RAF
Beograd

Član broj: 199831
Poruke: 5
*.static.ikomline.net.



Profil

icon Re: Dinamicka Alokacija Matrice08.02.2009. u 18:10 - pre 184 meseci
Hocu 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 hocu da mi se citav tekst ispise na stdout. A ovo sto si mi naglasio kod 4. reda u main nije greska, to je samo skraceno, radi isto kao i ono sto si ti napisao.
 
Odgovor na temu

Aleksandar Ilić
Software Developer
Beograd

Član broj: 15867
Poruke: 417

Sajt: www.ailic.rs


+3 Profil

icon Re: Dinamicka Alokacija Matrice08.02.2009. u 19:18 - pre 184 meseci
Citat:
TomaROGM: A ovo sto si mi naglasio kod 4. reda u main nije greska, to je samo skraceno, radi isto kao i ono sto si ti napisao.
To je netačno. U mom prethodnom postu imaš link ka objašnjenju funkcije malloc. Pročitaj.
„Naposletku, suština saznavanja nije u tome gubimo li igru, već kako je gubimo,
šta time spoznajemo, čemu nas je poraz naučio i kako nas to menja. Gubiti na određen
način znači - dobijati.”

Richard Bach
 
Odgovor na temu

TomaROGM
RAF
Beograd

Član broj: 199831
Poruke: 5
*.static.ikomline.net.



Profil

icon Re: Dinamicka Alokacija Matrice08.02.2009. u 22:36 - pre 184 meseci
Da, ispravio sam te greske, ali to ipak nije resenje na moj problem.
 
Odgovor na temu

Aleksandar Ilić
Software Developer
Beograd

Član broj: 15867
Poruke: 417

Sajt: www.ailic.rs


+3 Profil

icon Re: Dinamicka Alokacija Matrice09.02.2009. u 00:04 - pre 184 meseci
Problem se javlja zato što na početku alociraš samo 5 bloka (korak = 5)
Code:
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.
Code:
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).
„Naposletku, suština saznavanja nije u tome gubimo li igru, već kako je gubimo,
šta time spoznajemo, čemu nas je poraz naučio i kako nas to menja. Gubiti na određen
način znači - dobijati.”

Richard Bach
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: Dinamicka Alokacija Matrice

[ Pregleda: 4499 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.