Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

Pravilno alociranje memorije
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
Crni
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 15. 12. 2003. (01:20:43)
Postovi: (23C)16
Spol: muško
Sarma = la pohva - posuda
= 29 - 25
Lokacija: Zagreb

PostPostano: 22:38 pon, 10. 5. 2004    Naslov: Pravilno alociranje memorije Citirajte i odgovorite

[code:1]int **t;[/code:1]

Kako pravilno alocirati memoriju za dvodimenzionalno polje dimenzija m×n.
Probal' sam sa

[code:1]t=(int **) malloc ((m*n) *sizeof(int));[/code:1]

ali ne šljaka; javlja mi grešku u toku učitavanja i to uvijek kad hoću učitati t[2][0].

Napravil' sam i alternativnu verziju:

[code:1]typedef struct pok
{
int *t;
} pok;

main()
{
pok *a;
...
a=(pok *) malloc (m*sizeof(pok));
for (i=0; i<n; i++)
a.t=(int *) malloc (n*sizeof(int));
...
}[/code:1]
A ja bi baš htel' radit' sa t[][]. :(
Kod:
int **t;


Kako pravilno alocirati memoriju za dvodimenzionalno polje dimenzija m×n.
Probal' sam sa

Kod:
t=(int **) malloc ((m*n) *sizeof(int));


ali ne šljaka; javlja mi grešku u toku učitavanja i to uvijek kad hoću učitati t[2][0].

Napravil' sam i alternativnu verziju:

Kod:
typedef struct pok
{
 int *t;
} pok;

main()
{
 pok *a;
 ...
 a=(pok *) malloc (m*sizeof(pok));
 for (i=0; i<n; i++)
  a.t=(int *) malloc (n*sizeof(int));
 ...
}

A ja bi baš htel' radit' sa t[][]. Sad


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3562)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 23:21 pon, 10. 5. 2004    Naslov: Citirajte i odgovorite

[code:1]int **t, i;

t = (int **) malloc(m * sizeof(int *));
for (i = 0; i < m; i++)
t[i] = (int *) malloc(n * sizeof(int));[/code:1]

Nisam skroz siguran, jer je pisano napamet, a nemam compiler pri ruci za provjeriti (da, slucajno sam bootao Windoze :oops:). Ali, ideja je tu negdje... 8)

Naime, int **t kaze "[i]t je pointer na ponter na int[/i]", sto je u Cu isto kao i "[i]t je niz pointera na int[/i]". :D Onda prvo treba alocirati niz pointera na int*, a zatim i puno takvih pointera. :-s
Kod:
int **t, i;

t = (int **) malloc(m * sizeof(int *));
for (i = 0; i < m; i++)
  t[i] = (int *) malloc(n * sizeof(int));


Nisam skroz siguran, jer je pisano napamet, a nemam compiler pri ruci za provjeriti (da, slucajno sam bootao Windoze Embarassed). Ali, ideja je tu negdje... Cool

Naime, int **t kaze "t je pointer na ponter na int", sto je u Cu isto kao i "t je niz pointera na int". Very Happy Onda prvo treba alocirati niz pointera na int*, a zatim i puno takvih pointera. Eh?



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Crni
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 15. 12. 2003. (01:20:43)
Postovi: (23C)16
Spol: muško
Sarma = la pohva - posuda
= 29 - 25
Lokacija: Zagreb

PostPostano: 23:58 pon, 10. 5. 2004    Naslov: Citirajte i odgovorite

Ovo tvoje šljaka. Makar bi meni stvar logičnije izgledala ovako:

[code:1](*t)=(neki_tip *) malloc (m*sizeof(int*));
for (i=0; i<n; i++)
t[i]=(int *) malloc (n*sizeof(int));[/code:1]

Je li moguće definirat' [b]neki_tip[/b]?
Ovo tvoje šljaka. Makar bi meni stvar logičnije izgledala ovako:

Kod:
(*t)=(neki_tip *) malloc (m*sizeof(int*));
for (i=0; i<n; i++)
 t[i]=(int *) malloc (n*sizeof(int));


Je li moguće definirat' neki_tip?


[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3562)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 0:36 uto, 11. 5. 2004    Naslov: Citirajte i odgovorite

[quote="Crni"]Ovo tvoje šljaka. Makar bi meni stvar logičnije izgledala ovako:
[code:1](*t)=(neki_tip *) malloc (m*sizeof(int*));
for (i=0; i<n; i++)
t[i]=(int *) malloc (n*sizeof(int));[/code:1]
Je li moguće definirat' [b]neki_tip[/b]?[/quote]

Nema smisla tako... Treba biti:
[code:1](*t)=(neki_tip *) malloc (m*sizeof(neki_tip));[/code:1]ili[code:1](*t)=(int **) malloc (m*sizeof(int*));[/code:1]

Definicije tipa... typedef? :-k
Crni (napisa):
Ovo tvoje šljaka. Makar bi meni stvar logičnije izgledala ovako:
Kod:
(*t)=(neki_tip *) malloc (m*sizeof(int*));
for (i=0; i<n; i++)
 t[i]=(int *) malloc (n*sizeof(int));

Je li moguće definirat' neki_tip?


Nema smisla tako... Treba biti:
Kod:
(*t)=(neki_tip *) malloc (m*sizeof(neki_tip));
ili
Kod:
(*t)=(int **) malloc (m*sizeof(int*));


Definicije tipa... typedef? Think



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Crni
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 15. 12. 2003. (01:20:43)
Postovi: (23C)16
Spol: muško
Sarma = la pohva - posuda
= 29 - 25
Lokacija: Zagreb

PostPostano: 1:14 uto, 11. 5. 2004    Naslov: Citirajte i odgovorite

[quote="vsego"]Definicije tipa... typedef? [/quote]

Probal' sam sa

[code:1]typedef neki_tip (int *);[/code:1]

i neće.
vsego (napisa):
Definicije tipa... typedef?


Probal' sam sa

Kod:
typedef neki_tip (int *);


i neće.


[Vrh]
Korisnički profil Pošaljite privatnu poruku
mdoko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (71A)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: Heriot-Watt University, Edinburgh

PostPostano: 17:30 uto, 11. 5. 2004    Naslov: Citirajte i odgovorite

Ovako radi, ako si na to mislio:
[code:1]
typedef int* int_p;
int i;
int_p* t;
t = (int_p*) malloc(m * sizeof(int_p);
for(i = 0; i < n; ++i) t[i] = (int_p) malloc(n * sizeof(int));
[/code:1]

Dakle, t je pointer na pointer na int, alocira se memorija za polje od m pointera na int. Nakon ovoga je t[i] pointer na int (i=0,..,m-1), za svaki 'legalan' i alocira se memorija za polje od n int-ova. Sada je t[i][j] j-ti int u i-tome polju int-ova sto se moze interpretirati kao element u i-tom retku i j-tom stupcu.
Ovako radi, ako si na to mislio:
Kod:

typedef int* int_p;
int i;
int_p* t;
t = (int_p*) malloc(m * sizeof(int_p);
for(i = 0; i < n; ++i) t[i] = (int_p) malloc(n * sizeof(int));


Dakle, t je pointer na pointer na int, alocira se memorija za polje od m pointera na int. Nakon ovoga je t[i] pointer na int (i=0,..,m-1), za svaki 'legalan' i alocira se memorija za polje od n int-ova. Sada je t[i][j] j-ti int u i-tome polju int-ova sto se moze interpretirati kao element u i-tom retku i j-tom stupcu.



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan


Zadnja promjena: mdoko; 17:43 uto, 11. 5. 2004; ukupno mijenjano 1 put.
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
mdoko
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 30. 11. 2002. (22:17:12)
Postovi: (71A)16
Spol: muško
Sarma = la pohva - posuda
199 = 237 - 38
Lokacija: Heriot-Watt University, Edinburgh

PostPostano: 17:43 uto, 11. 5. 2004    Naslov: Citirajte i odgovorite

I jos jedna napomena:

[quote="Crni"]

Probal' sam sa

[code:1]typedef neki_tip (int *);[/code:1]

i neće.[/quote]

Ovo nije ispravna sintaksa. Naredba typedef koristi se na sljedeci nacin:
Ako zelimo da postojeci tip T nazovemo imenom novi_T, onda nakon kljucne rijeci typedef slijedi ono sto bi pisali kao da zelimo deklarirati varijablu novi_T tipa T.
Evo i nekih primjera:
[code:1]
typedef int I; /* I je novo ime za int */

typedef double *double_ptr; /* double_ptr je novo ime za pointer na double */

typedef float (*f_ptr)(int, int); /* f_ptr je novo ime za pointer na funkciju koja prima dva int-a i vraca float */[/code:1]
I jos jedna napomena:

Crni (napisa):


Probal' sam sa

Kod:
typedef neki_tip (int *);


i neće.


Ovo nije ispravna sintaksa. Naredba typedef koristi se na sljedeci nacin:
Ako zelimo da postojeci tip T nazovemo imenom novi_T, onda nakon kljucne rijeci typedef slijedi ono sto bi pisali kao da zelimo deklarirati varijablu novi_T tipa T.
Evo i nekih primjera:
Kod:

typedef int I; /* I je novo ime za int */

typedef double *double_ptr; /* double_ptr je novo ime za pointer na double */

typedef float (*f_ptr)(int, int); /* f_ptr je novo ime za pointer na funkciju koja prima dva int-a i vraca float */



_________________
Extraordinary claims require extraordinary evidence. – Carl Sagan
[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan