Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
Luuka Forumaš(ica)


Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol: 
Lokacija: Hakuna Matata
|
Postano: 11:51 ned, 3. 2. 2008 Naslov: mapping - compute |
|
|
[code:1]#define maxlength nešto
typedef struct
{
domain domainelement;
range rangeelement;
} celltype;
typedef struct
{
celltype pairs[maxlength];
int last;
} MAPPING;
int COMPUTE( MAPPING M, domain d, range *r ) {
int l = 0, m, u = M.last;
domain dm;
while( l <= u ) {
m = ( l + u ) / 2;
dm = M.pairs[m].domainelement;
if( dm == d ) {
(*r) = M.pairs[m].rangeelement;
return 1;
}
else if( dm < d )
l = m + 1;
else
u = m - 1;
}
return 0;[/code:1]
poziv fje sa:
[code:1]MAPPING M;
domain s;
range p;
int nadjen;
nadjen = COMPUTE (M,s,&p);[/code:1]
Ovo je iz prezentacija dostupnih na službenim stranicama kolegija, radi se o implementaciji mappinga pomoću sortiranog polja.
Moje pitanje je: zašto se ovo ruši u programu a ne bi trebalo?! Uopće ne uđe u funkciju, samo se zatvori prozor!!
Kod: | #define maxlength nešto
typedef struct
{
domain domainelement;
range rangeelement;
} celltype;
typedef struct
{
celltype pairs[maxlength];
int last;
} MAPPING;
int COMPUTE( MAPPING M, domain d, range *r ) {
int l = 0, m, u = M.last;
domain dm;
while( l <= u ) {
m = ( l + u ) / 2;
dm = M.pairs[m].domainelement;
if( dm == d ) {
(*r) = M.pairs[m].rangeelement;
return 1;
}
else if( dm < d )
l = m + 1;
else
u = m - 1;
}
return 0; |
poziv fje sa:
Kod: | MAPPING M;
domain s;
range p;
int nadjen;
nadjen = COMPUTE (M,s,&p); |
Ovo je iz prezentacija dostupnih na službenim stranicama kolegija, radi se o implementaciji mappinga pomoću sortiranog polja.
Moje pitanje je: zašto se ovo ruši u programu a ne bi trebalo?! Uopće ne uđe u funkciju, samo se zatvori prozor!!
_________________ "Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy 
|
|
[Vrh] |
|
Luuka Forumaš(ica)


Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol: 
Lokacija: Hakuna Matata
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3561)16
Spol: 
Lokacija: /sbin/init
|
|
[Vrh] |
|
Luuka Forumaš(ica)


Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol: 
Lokacija: Hakuna Matata
|
Postano: 15:40 ned, 3. 2. 2008 Naslov: |
|
|
Pozvan je MAKE_NULL(&M)... i u njoj piše:
[code:1]void MAKE_NULL (MAPPING *M)
{
(M->zadnji)=0;
}[/code:1]
A čita tek kad je nešto već unutra...u mom primjeru 2 puta ide assign i to dobro napravi...
Pozvan je MAKE_NULL(&M)... i u njoj piše:
Kod: | void MAKE_NULL (MAPPING *M)
{
(M->zadnji)=0;
} |
A čita tek kad je nešto već unutra...u mom primjeru 2 puta ide assign i to dobro napravi...
_________________ "Bolje bi prolazio na faxu da sam na drogama nego na netu" - by a friend of mine
"Poslije spavanja doma spavanje bilo di mi je najdraža stvar" - by the same guy 
|
|
[Vrh] |
|
MKova Forumaš(ica)


Pridružen/a: 01. 10. 2005. (18:24:38) Postovi: (187)16
Spol: 
|
Postano: 15:43 ned, 3. 2. 2008 Naslov: |
|
|
ja imam problem vezan uz stringove pak....
MAPPING mi se sastoji od polja stringova key[] i brojeva value[] ...
ja u make_null funkciji alociram memoriju za stringove:
[code:1]
#define LAMBDA ""
M->key[i] = (char*)malloc(21*sizeof(char));
M->key[i] = LAMBDA;[/code:1]
ali prilikom assigna, koristeći strcpy javlja error (rusi se program) ako opet ne alociram memoriju...
[code:1]
if (M->key[i] == LAMBDA) {
// M->key[i] = (char*)malloc(21*sizeof(char));
strcpy(M->key[i], d);
M->value[i] = r;
}
[/code:1]
gdje se prva alocirana memorija iz make_null zgubila u međuvremenu? :?
EDIT:
mislim da sam skuzio, kad napravim
[code:1]M->key[i] = "";[/code:1]
to zapravo mijenja pointer na taj novi mali string "", pa alocirana memorija ostaje drugdje... ovaj C fakat ima svasta za pazit
ja imam problem vezan uz stringove pak....
MAPPING mi se sastoji od polja stringova key[] i brojeva value[] ...
ja u make_null funkciji alociram memoriju za stringove:
Kod: |
#define LAMBDA ""
M->key[i] = (char*)malloc(21*sizeof(char));
M->key[i] = LAMBDA; |
ali prilikom assigna, koristeći strcpy javlja error (rusi se program) ako opet ne alociram memoriju...
Kod: |
if (M->key[i] == LAMBDA) {
// M->key[i] = (char*)malloc(21*sizeof(char));
strcpy(M->key[i], d);
M->value[i] = r;
}
|
gdje se prva alocirana memorija iz make_null zgubila u međuvremenu?
EDIT:
mislim da sam skuzio, kad napravim
to zapravo mijenja pointer na taj novi mali string "", pa alocirana memorija ostaje drugdje... ovaj C fakat ima svasta za pazit
_________________ suradnici za razvoj igre traženi!! vidi ovo
Zadnja promjena: MKova; 15:48 ned, 3. 2. 2008; ukupno mijenjano 4 put/a.
|
|
[Vrh] |
|
vsego Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3561)16
Spol: 
Lokacija: /sbin/init
|
Postano: 16:00 ned, 3. 2. 2008 Naslov: |
|
|
Ostala je alocirana, ali bez pointera, kad si izveo drugu lajnu iz prvog [tt][c[i][/i]ode]...[/code][/tt]-bloka. :)
[code:1] #define LAMBDA ""
M->key[i] = (char*)malloc(21*sizeof(char));
M->key[i] = LAMBDA;[/code:1]
Trebalo je (u zadnjoj lajni) ici:
[code:1]strcpy(M->key[i], LAMBDA);[/code:1]
ili, jednostavno,
[code:1]M->key[i][0] = '\0';[/code:1]
No, kad vec radis s pointerima, onda je cak i bolje ne alocirati memoriju dok ti ne treba, nego staviti:
[code:1] #define LAMBDA NULL
M->key[i] = LAMBDA;[/code:1]
Jasno, to trazi ponesto modifikacija po ostatku koda... 8)
@Luuka: ako zelis da opet pogledam prog, posalji mi aktualnu verziju na PM. :)
Ostala je alocirana, ali bez pointera, kad si izveo drugu lajnu iz prvog [code]...[/code]-bloka.
Kod: | #define LAMBDA ""
M->key[i] = (char*)malloc(21*sizeof(char));
M->key[i] = LAMBDA; |
Trebalo je (u zadnjoj lajni) ici:
Kod: | strcpy(M->key[i], LAMBDA); |
ili, jednostavno,
Kod: | M->key[i][0] = '\0'; |
No, kad vec radis s pointerima, onda je cak i bolje ne alocirati memoriju dok ti ne treba, nego staviti:
Kod: | #define LAMBDA NULL
M->key[i] = LAMBDA; |
Jasno, to trazi ponesto modifikacija po ostatku koda...
@Luuka: ako zelis da opet pogledam prog, posalji mi aktualnu verziju na PM.
_________________ 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. 
|
|
[Vrh] |
|
MKova Forumaš(ica)


Pridružen/a: 01. 10. 2005. (18:24:38) Postovi: (187)16
Spol: 
|
Postano: 16:03 ned, 3. 2. 2008 Naslov: |
|
|
[quote="vsego"]
No, kad vec radis s pointerima, onda je cak i bolje ne alocirati memoriju dok ti ne treba, nego staviti:
[code:1] #define LAMBDA NULL
M->key[i] = LAMBDA;[/code:1]
[/quote]
tnx.
Odlicno, NULL je jos bolje rjesenje od "", jer time ne rezerviramo clan domene i ne moram pri usporedbi koristit strcmp()
vsego (napisa): |
No, kad vec radis s pointerima, onda je cak i bolje ne alocirati memoriju dok ti ne treba, nego staviti:
Kod: | #define LAMBDA NULL
M->key[i] = LAMBDA; |
|
tnx.
Odlicno, NULL je jos bolje rjesenje od "", jer time ne rezerviramo clan domene i ne moram pri usporedbi koristit strcmp()
_________________ suradnici za razvoj igre traženi!! vidi ovo
|
|
[Vrh] |
|
MKova Forumaš(ica)


Pridružen/a: 01. 10. 2005. (18:24:38) Postovi: (187)16
Spol: 
|
|
[Vrh] |
|
Luuka Forumaš(ica)


Pridružen/a: 13. 02. 2007. (20:34:54) Postovi: (925)16
Spol: 
Lokacija: Hakuna Matata
|
|
[Vrh] |
|
MKova Forumaš(ica)


Pridružen/a: 01. 10. 2005. (18:24:38) Postovi: (187)16
Spol: 
|
|
[Vrh] |
|
|