Prethodna tema :: Sljedeća tema |
Autor/ica |
Poruka |
quark Forumaš(ica)
Pridružen/a: 22. 10. 2011. (16:47:39) Postovi: (DA)16
Spol:
|
|
[Vrh] |
|
mdoko Forumaš(ica)
Pridružen/a: 30. 11. 2002. (22:17:12) Postovi: (71A)16
Spol:
Lokacija: Heriot-Watt University, Edinburgh
|
|
[Vrh] |
|
Zenon Forumaš(ica)
Pridružen/a: 09. 09. 2011. (19:14:43) Postovi: (2B1)16
Sarma: -
Lokacija: [tex]\pm\infty[/tex]
|
|
[Vrh] |
|
linus Forumaš(ica)
Pridružen/a: 20. 11. 2011. (16:59:13) Postovi: (46)16
Lokacija: subnet mask
|
Postano: 19:14 uto, 8. 5. 2012 Naslov: |
|
|
evo radim bas program is skripte:
treba ucitati dvije strukture tipa osoba s nekim osobnim podacima, zamijeniti sadrzaje struktura i onda ih ispisati. Za ucitavanje i ispis sam napravio posebne funkcije i s time nema problema, ali napravio sam i funkciju swap
[code:1]
void swap(osoba *ja, osoba *on)
{
osoba *temp;
*temp=*ja;
*ja=*on;
*on=*temp;
}
[/code:1]
na kojoj s eprogram zbrejka. Stvar je u tome sta kada taj dio stavim u main:
[code:1]
osoba temp;
temp=svatko;
svatko=netko;
netko=temp;
[/code:1]
sve radi normalno. Zasto mi ne prihvaca funkciju (deklarirana je prije poziva)?
EDIT1: naravo, funkciji dajem adrese
[code:1]
swap(&netko, &svatko);[/code:1]
evo radim bas program is skripte:
treba ucitati dvije strukture tipa osoba s nekim osobnim podacima, zamijeniti sadrzaje struktura i onda ih ispisati. Za ucitavanje i ispis sam napravio posebne funkcije i s time nema problema, ali napravio sam i funkciju swap
Kod: |
void swap(osoba *ja, osoba *on)
{
osoba *temp;
*temp=*ja;
*ja=*on;
*on=*temp;
}
|
na kojoj s eprogram zbrejka. Stvar je u tome sta kada taj dio stavim u main:
Kod: |
osoba temp;
temp=svatko;
svatko=netko;
netko=temp;
|
sve radi normalno. Zasto mi ne prihvaca funkciju (deklarirana je prije poziva)?
EDIT1: naravo, funkciji dajem adrese
Kod: |
swap(&netko, &svatko); |
|
|
[Vrh] |
|
gflegar Forumaš(ica)
Pridružen/a: 12. 10. 2011. (15:03:41) Postovi: (10D)16
Spol:
|
|
[Vrh] |
|
linus Forumaš(ica)
Pridružen/a: 20. 11. 2011. (16:59:13) Postovi: (46)16
Lokacija: subnet mask
|
|
[Vrh] |
|
sasha.f Forumaš(ica)
Pridružen/a: 25. 10. 2011. (20:04:19) Postovi: (3D)16
|
Postano: 17:19 pet, 18. 5. 2012 Naslov: |
|
|
u ovom i slicnima ispisuje mi samo zadnji razlomak pa ako moze netko pogledati..
[code:1]/*
Zadatak 7.1.23. Napiˇ site funkciju koja kao argument uzima pointer na poˇ cetak liste
razlomaka (definiranih kao u zadatku 7.1.17), te vra´ ca pointer na invertiranu verziju te
liste. Invertiranje treba posti´ ci razmjeˇ stanjem postoje´ cih elemenata, BEZ upotrebe funk-
cije malloc().*/
#include <stdio.h>
#include <stdlib.h>
typedef struct _cvor
{
int br, naz;
struct _cvor *next;
}cvor;
cvor *dodaj(cvor *prvi, int x, int y)
{
cvor *novi;
novi=(cvor*)malloc(sizeof(cvor));
novi->br=x;
novi->naz=y;
novi->next=NULL;
if(prvi==NULL)
{
prvi=novi;
}
else
{
novi->next=prvi;
prvi=novi;
}
return prvi;
}
cvor *funk(cvor *prvi)
{
cvor *temp, *pom, *prvi1=NULL, *preth=NULL;
for(pom=prvi; pom!=NULL; pom=pom->next)
{
if(preth==NULL)
{
prvi1=prvi;
prvi1->next=NULL;
}
else
{
preth->next=prvi1->next;
prvi1=pom;
}
preth=pom;
}
return prvi1;
}
int main(void)
{
cvor *pom;
cvor *prvi=NULL;
int x,y;
while(1)
{
printf("Brojnik: ");
scanf("%d", &x);
printf("Nazivnik: ");
scanf("%d", &y);
if(y==0)
break;
prvi=dodaj(prvi, x, y);
}
prvi=funk(prvi);
for(pom=prvi; pom!=NULL; pom=pom->next)
{
printf("%d", pom->br);
printf("%d", pom->naz);
}
while(prvi!=NULL)
{
cvor *temp=prvi;
prvi=prvi->next;
free(temp);
}
return 0;
}
[/code:1]
u ovom i slicnima ispisuje mi samo zadnji razlomak pa ako moze netko pogledati..
Kod: | /*
Zadatak 7.1.23. Napiˇ site funkciju koja kao argument uzima pointer na poˇ cetak liste
razlomaka (definiranih kao u zadatku 7.1.17), te vra´ ca pointer na invertiranu verziju te
liste. Invertiranje treba posti´ ci razmjeˇ stanjem postoje´ cih elemenata, BEZ upotrebe funk-
cije malloc().*/
#include <stdio.h>
#include <stdlib.h>
typedef struct _cvor
{
int br, naz;
struct _cvor *next;
}cvor;
cvor *dodaj(cvor *prvi, int x, int y)
{
cvor *novi;
novi=(cvor*)malloc(sizeof(cvor));
novi->br=x;
novi->naz=y;
novi->next=NULL;
if(prvi==NULL)
{
prvi=novi;
}
else
{
novi->next=prvi;
prvi=novi;
}
return prvi;
}
cvor *funk(cvor *prvi)
{
cvor *temp, *pom, *prvi1=NULL, *preth=NULL;
for(pom=prvi; pom!=NULL; pom=pom->next)
{
if(preth==NULL)
{
prvi1=prvi;
prvi1->next=NULL;
}
else
{
preth->next=prvi1->next;
prvi1=pom;
}
preth=pom;
}
return prvi1;
}
int main(void)
{
cvor *pom;
cvor *prvi=NULL;
int x,y;
while(1)
{
printf("Brojnik: ");
scanf("%d", &x);
printf("Nazivnik: ");
scanf("%d", &y);
if(y==0)
break;
prvi=dodaj(prvi, x, y);
}
prvi=funk(prvi);
for(pom=prvi; pom!=NULL; pom=pom->next)
{
printf("%d", pom->br);
printf("%d", pom->naz);
}
while(prvi!=NULL)
{
cvor *temp=prvi;
prvi=prvi->next;
free(temp);
}
return 0;
}
|
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (355F)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
Milojko Forumaš(ica)
Pridružen/a: 07. 11. 2008. (14:57:52) Postovi: (453)16
Spol:
Lokacija: Hilbertov hotel
|
Postano: 18:26 pet, 18. 5. 2012 Naslov: |
|
|
Ne smije koristiti malloc() pa mora bez brisanja, nego samo manipulacija pointerima.
[size=9][color=#999999]Added after 6 minutes:[/color][/size]
Ne povezuješ listu naopačke, pa ti zato ne radi. Mislim da, ako staviš [tt]prvi1->next = preth[/tt] će raditi. Ova linija gdje povezuješ preth->next... je nepotrebna
Ne smije koristiti malloc() pa mora bez brisanja, nego samo manipulacija pointerima.
Added after 6 minutes:
Ne povezuješ listu naopačke, pa ti zato ne radi. Mislim da, ako staviš prvi1→next = preth će raditi. Ova linija gdje povezuješ preth→next... je nepotrebna
_________________ Sedam je prost broj
Bolonja je smeće i to pod hitno treba mijenjat
|
|
[Vrh] |
|
sasha.f Forumaš(ica)
Pridružen/a: 25. 10. 2011. (20:04:19) Postovi: (3D)16
|
|
[Vrh] |
|
angelika Forumaš(ica)
Pridružen/a: 08. 02. 2011. (17:26:51) Postovi: (5F)16
|
Postano: 13:18 uto, 22. 5. 2012 Naslov: |
|
|
Jel mi može netko reći gdje griješim u ispisu vezane liste? Već se dva sata mučim pokušavajući ispisati to čudo :oops:
[code:1]#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Automobil{
char ime[31];
int cijena;
struct Automobil *next;
}au;
au* ubaci_na_pocetak (au* start, int x, char a[])
{
au* novi=(au*)malloc(sizeof(au));
if(novi==NULL)
{
printf("greska pri alokaciji");
exit(-1);
}
novi->cijena=x;
strcpy(novi->ime,a);
novi->next= start;
return start;
}
au* izbaci_s_pocetka( au* start)
{
if(start!=NULL)
{
au* izbaceni=start;
start=izbaceni->next;
free(izbaceni);
}
return start;
}
void brisanje_liste(au* start)
{
while(start!=NULL)
{
start=izbaci_s_pocetka(start);
}
}
void ispis(au* start)
{
au *p;
printf("Ispis liste\n");
for(p=start; p!=NULL; p=p->next)
{
printf(" %s %d" ,p->ime , p->cijena);
}
}
int main()
{
int x;
char odg;
char autek[31];
au* lista=NULL;
au *p;
while(1)
{
printf("Ucitaj ime\n");
scanf(" %[^\n]", autek);
printf("Ucitaj cijenu\n");
scanf("%d",&x);
lista=ubaci_na_pocetak(lista,x, autek);
printf("Zelis li ucitati jos auta? d/n");
scanf(" %c",&odg);
if(odg=='n') break;
}
ispis(lista);
brisanje_liste(lista);
return 0;
}
[/code:1]
Jel mi može netko reći gdje griješim u ispisu vezane liste? Već se dva sata mučim pokušavajući ispisati to čudo
Kod: | #include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Automobil{
char ime[31];
int cijena;
struct Automobil *next;
}au;
au* ubaci_na_pocetak (au* start, int x, char a[])
{
au* novi=(au*)malloc(sizeof(au));
if(novi==NULL)
{
printf("greska pri alokaciji");
exit(-1);
}
novi->cijena=x;
strcpy(novi->ime,a);
novi->next= start;
return start;
}
au* izbaci_s_pocetka( au* start)
{
if(start!=NULL)
{
au* izbaceni=start;
start=izbaceni->next;
free(izbaceni);
}
return start;
}
void brisanje_liste(au* start)
{
while(start!=NULL)
{
start=izbaci_s_pocetka(start);
}
}
void ispis(au* start)
{
au *p;
printf("Ispis liste\n");
for(p=start; p!=NULL; p=p->next)
{
printf(" %s %d" ,p->ime , p->cijena);
}
}
int main()
{
int x;
char odg;
char autek[31];
au* lista=NULL;
au *p;
while(1)
{
printf("Ucitaj ime\n");
scanf(" %[^\n]", autek);
printf("Ucitaj cijenu\n");
scanf("%d",&x);
lista=ubaci_na_pocetak(lista,x, autek);
printf("Zelis li ucitati jos auta? d/n");
scanf(" %c",&odg);
if(odg=='n') break;
}
ispis(lista);
brisanje_liste(lista);
return 0;
}
|
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (355F)16
Spol:
Lokacija: /sbin/init
|
|
[Vrh] |
|
angelika Forumaš(ica)
Pridružen/a: 08. 02. 2011. (17:26:51) Postovi: (5F)16
|
|
[Vrh] |
|
simon11 Forumaš(ica)
Pridružen/a: 01. 10. 2011. (21:02:52) Postovi: (7C)16
Spol:
Lokacija: FunkyTown
|
Postano: 14:39 uto, 29. 5. 2012 Naslov: |
|
|
imam i ja problem s ispisom,tocnije napravim program koji samo ucita listu i potom ju ispise i to sve napravi pravilno,ali se poslije ispisa srusi.pa ako netko moze reci zasto.evo kod
[code:1]#include<stdio.h>
typedef struct _razlomak
{
int x,y;
struct _razlomak *next;
}razlomak;
int main(void)
{
razlomak *glava=NULL,*pom,*pom2,*new;
char c='d';
int x,y;
while(c=='d') //unos liste
{
new=(razlomak*)malloc(sizeof(razlomak));
scanf("%d%d",&x,&y);
new->x=x;
new->y=y;
if (glava)
pom=pom->next=new;
else
pom=glava=new;
printf("opet? d/n");
scanf(" %c",&c);
}
pom2=glava;
while(pom2) //ipis liste
{
printf("%d/%d\n",pom2->x,pom2->y);
pom2=pom2->next;
}
printf("ovdje");//ovaj dio se ne ispise jer se program srusi
for(pom=glava;pom;pom=pom2) //oslobadanje liste
{
pom2=pom->next;
free(pom);
}
return 0;
}
[/code:1]
imam i ja problem s ispisom,tocnije napravim program koji samo ucita listu i potom ju ispise i to sve napravi pravilno,ali se poslije ispisa srusi.pa ako netko moze reci zasto.evo kod
Kod: | #include<stdio.h>
typedef struct _razlomak
{
int x,y;
struct _razlomak *next;
}razlomak;
int main(void)
{
razlomak *glava=NULL,*pom,*pom2,*new;
char c='d';
int x,y;
while(c=='d') //unos liste
{
new=(razlomak*)malloc(sizeof(razlomak));
scanf("%d%d",&x,&y);
new->x=x;
new->y=y;
if (glava)
pom=pom->next=new;
else
pom=glava=new;
printf("opet? d/n");
scanf(" %c",&c);
}
pom2=glava;
while(pom2) //ipis liste
{
printf("%d/%d\n",pom2->x,pom2->y);
pom2=pom2->next;
}
printf("ovdje");//ovaj dio se ne ispise jer se program srusi
for(pom=glava;pom;pom=pom2) //oslobadanje liste
{
pom2=pom->next;
free(pom);
}
return 0;
}
|
_________________
getting recognized
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (355F)16
Spol:
Lokacija: /sbin/init
|
Postano: 15:55 uto, 29. 5. 2012 Naslov: |
|
|
Fali ti da [tt]next[/tt] od zadnjeg, nakon ucitavanja, stavis na [tt]NULL[/tt], pa ti ispis "izleti" iz liste.
Fali ti da next od zadnjeg, nakon ucitavanja, stavis na NULL, pa ti ispis "izleti" iz liste.
_________________ 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] |
|
simon11 Forumaš(ica)
Pridružen/a: 01. 10. 2011. (21:02:52) Postovi: (7C)16
Spol:
Lokacija: FunkyTown
|
|
[Vrh] |
|
quark Forumaš(ica)
Pridružen/a: 22. 10. 2011. (16:47:39) Postovi: (DA)16
Spol:
|
Postano: 19:44 čet, 31. 5. 2012 Naslov: |
|
|
Evo, sad meni treba pomoć :D
Riječ je o zadatku 8.1.45.: (u spoileru je da bude preglednije)
8.1.44: [spoiler]U datoteci su popisane nogometne utakmice, u svakom retku po jedna i
to u sljedecem formatu:
Klub 1:Klub 2=a:b
Brojevi a i b oznacavaju broj golova koje je dao “Klub 1” odnosno “Klub 2”. Pobjeda
donosi 3 boda, izjednacenje 1 bod, a poraz 0 bodova. Napisite funkciju koja kao argumente prima nazive ulazne i izlazne datoteke, te ucitava podatke o utakmicama (snimljene
na opisani nacin) iz ulazne datoteke. U izlaznu datoteku funckija treba ispisati konacnu
rang-listu klubova sortiranu silazno prema broju bodova, u formatu pogodnom za citanje pomocu tablicnih kalkulatora.
Mozete pretpostaviti da je ukupni broj klubova najvise 20, te da je naziv svakog kluba
najvise 50 znakova.[/spoiler]
8.1.45: Rijesite prethodni zadatak bez ogranicenja na najveci moguci broj klubova.
Upute. Izmijenite funkciju teamIndex() tako da po potrebi realocira memoriju za nove
elemente polja. Pri tome argument list mora biti tipa team**. Takoder, potrebno je
prilagoditi deklaraciju liste momcadi u funkciji football().
Meni nije jasno zašto treba biti [tt]team**[/tt], tj. [tt]tablica**[/tt]?
Imamo pokazivač na structove i onda svaki put realociramo tu varijablu i na to zadnje realocirano mjesto zalijepimo podatke. Ja sam onda napisao program po svojoj intuiciji i ruši se :oops:
(I ako stavim za globalnu varijantu [tt]klub tablica[0][/tt] compiler se buni; zar to nije ekvivalentno :?)
[code:1]typedef struct
{
char imeKluba[50];
int brojBodova;
} klub;
klub *tablica=NULL;
int brojKlubova=0;
void dodajBodove(char ime[], int bodovi)
{
int i;
for(i=0;i<brojKlubova;++i)
if(strcmp(ime, tablica[i].imeKluba)==0)
{
tablica[i].brojBodova+=bodovi;
return;
}
tablica=(klub*) realloc(tablica, sizeof(klub));
strcpy(tablica[brojKlubova].imeKluba, ime);
tablica[brojKlubova].brojBodova=bodovi;
++brojKlubova;
return;
}
void napraviTablicu(FILE *fin, FILE *fout)
{
int i, j;
while(1)
{
char klub1[50], klub2[50];
int gol1, gol2;
if(fscanf(fin, " %[^:]:%[^=]=%d:%d", klub1, klub2, &gol1, &gol2)!=4)
break;
if(gol1>gol2)
{ dodajBodove(klub1, 3);
dodajBodove(klub2, 0);
}
if(gol2>gol1)
{
dodajBodove(klub2, 3);
dodajBodove(klub1, 0);
}
if(gol2==gol1)
{
dodajBodove(klub1, 1);
dodajBodove(klub2, 1);
}
}
for(i=0;i<brojKlubova;i++)
for(j=i+1;j<brojKlubova;j++)
if(tablica[i].brojBodova < tablica[j].brojBodova)
{
klub temp = tablica[i];
tablica[i]=tablica[j];
tablica[j]=temp;
}
for(i=0;i<brojKlubova;i++)
fprintf(fout, "%s;%d\n", tablica[i].imeKluba, tablica[i].brojBodova);
return;
}[/code:1]
Unaprijed hvala :)
Evo, sad meni treba pomoć
Riječ je o zadatku 8.1.45.: (u spoileru je da bude preglednije)
8.1.44: Spoiler [hidden; click to show]: | U datoteci su popisane nogometne utakmice, u svakom retku po jedna i
to u sljedecem formatu:
Klub 1:Klub 2=a:b
Brojevi a i b oznacavaju broj golova koje je dao “Klub 1” odnosno “Klub 2”. Pobjeda
donosi 3 boda, izjednacenje 1 bod, a poraz 0 bodova. Napisite funkciju koja kao argumente prima nazive ulazne i izlazne datoteke, te ucitava podatke o utakmicama (snimljene
na opisani nacin) iz ulazne datoteke. U izlaznu datoteku funckija treba ispisati konacnu
rang-listu klubova sortiranu silazno prema broju bodova, u formatu pogodnom za citanje pomocu tablicnih kalkulatora.
Mozete pretpostaviti da je ukupni broj klubova najvise 20, te da je naziv svakog kluba
najvise 50 znakova. |
8.1.45: Rijesite prethodni zadatak bez ogranicenja na najveci moguci broj klubova.
Upute. Izmijenite funkciju teamIndex() tako da po potrebi realocira memoriju za nove
elemente polja. Pri tome argument list mora biti tipa team**. Takoder, potrebno je
prilagoditi deklaraciju liste momcadi u funkciji football().
Meni nije jasno zašto treba biti team**, tj. tablica**?
Imamo pokazivač na structove i onda svaki put realociramo tu varijablu i na to zadnje realocirano mjesto zalijepimo podatke. Ja sam onda napisao program po svojoj intuiciji i ruši se
(I ako stavim za globalnu varijantu klub tablica[0] compiler se buni; zar to nije ekvivalentno )
Kod: | typedef struct
{
char imeKluba[50];
int brojBodova;
} klub;
klub *tablica=NULL;
int brojKlubova=0;
void dodajBodove(char ime[], int bodovi)
{
int i;
for(i=0;i<brojKlubova;++i)
if(strcmp(ime, tablica[i].imeKluba)==0)
{
tablica[i].brojBodova+=bodovi;
return;
}
tablica=(klub*) realloc(tablica, sizeof(klub));
strcpy(tablica[brojKlubova].imeKluba, ime);
tablica[brojKlubova].brojBodova=bodovi;
++brojKlubova;
return;
}
void napraviTablicu(FILE *fin, FILE *fout)
{
int i, j;
while(1)
{
char klub1[50], klub2[50];
int gol1, gol2;
if(fscanf(fin, " %[^:]:%[^=]=%d:%d", klub1, klub2, &gol1, &gol2)!=4)
break;
if(gol1>gol2)
{ dodajBodove(klub1, 3);
dodajBodove(klub2, 0);
}
if(gol2>gol1)
{
dodajBodove(klub2, 3);
dodajBodove(klub1, 0);
}
if(gol2==gol1)
{
dodajBodove(klub1, 1);
dodajBodove(klub2, 1);
}
}
for(i=0;i<brojKlubova;i++)
for(j=i+1;j<brojKlubova;j++)
if(tablica[i].brojBodova < tablica[j].brojBodova)
{
klub temp = tablica[i];
tablica[i]=tablica[j];
tablica[j]=temp;
}
for(i=0;i<brojKlubova;i++)
fprintf(fout, "%s;%d\n", tablica[i].imeKluba, tablica[i].brojBodova);
return;
} |
Unaprijed hvala
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (355F)16
Spol:
Lokacija: /sbin/init
|
Postano: 19:57 čet, 31. 5. 2012 Naslov: |
|
|
[quote="quark"]Meni nije jasno zašto treba biti team**, tj. tablica**?[/quote]
Ti si to zaobisao globalnim varijablama (koje, opcenito, nisu bas najsretnija programerska praksa). Inace, ako zelis reci
[tt]tablica=(klub*) realloc(tablica, ...);[/tt]
a [tt]tablica[/tt] je lokalna varijabla (argument funkcije), stvar nece sljakati (vidi sto sam neki dan pisao o varijabilnim argumentima). Tu ti treba varijabla koja je pointer na tvoj niz klubova. Posto je niz tipa [tt]klub*[/tt], pointer na njega je [tt]klub**[/tt], a tvoja realokacija tada postaje
[tt]*tablica=(klub**) realloc(*tablica, ...);[/tt]
Tebi se rusi zbog krive realokacije. Funkcija [tt]realloc()[/tt] kao drugi argument prima [b]novu velicinu niza[/b] ([tt](brojKlubova+1) * sizeof(klub)[/tt]), a ne [strike]kolicinu dodane memorije[/strike] ([tt]sizeof(klub)[/tt]).
quark (napisa): | Meni nije jasno zašto treba biti team**, tj. tablica**? |
Ti si to zaobisao globalnim varijablama (koje, opcenito, nisu bas najsretnija programerska praksa). Inace, ako zelis reci
tablica=(klub*) realloc(tablica, ...);
a tablica je lokalna varijabla (argument funkcije), stvar nece sljakati (vidi sto sam neki dan pisao o varijabilnim argumentima). Tu ti treba varijabla koja je pointer na tvoj niz klubova. Posto je niz tipa klub*, pointer na njega je klub**, a tvoja realokacija tada postaje
*tablica=(klub**) realloc(*tablica, ...);
Tebi se rusi zbog krive realokacije. Funkcija realloc() kao drugi argument prima novu velicinu niza ((brojKlubova+1) * sizeof(klub)), a ne kolicinu dodane memorije (sizeof(klub)).
_________________ 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] |
|
quark Forumaš(ica)
Pridružen/a: 22. 10. 2011. (16:47:39) Postovi: (DA)16
Spol:
|
Postano: 20:32 čet, 31. 5. 2012 Naslov: |
|
|
[quote="vsego"]
Ti si to zaobisao globalnim varijablama (koje, opcenito, nisu bas najsretnija programerska praksa). Inace, ako zelis reci
[tt]tablica=(klub*) realloc(tablica, ...);[/tt]
a [tt]tablica[/tt] je lokalna varijabla (argument funkcije), stvar nece sljakati (vidi sto sam neki dan pisao o varijabilnim argumentima). Tu ti treba varijabla koja je pointer na tvoj niz klubova. Posto je niz tipa [tt]klub*[/tt], pointer na njega je [tt]klub**[/tt], a tvoja realokacija tada postaje
[tt]*tablica=(klub**) realloc(*tablica, ...);[/tt]
[/quote]
A ako funkciji pošaljem (već u mainu definiran) [tt]tablica[/tt], zar to nije ekvivalentno s [tt]&tablica[0][/tt] pa je to onda varijabilni argument?
[quote]Tebi se rusi zbog krive realokacije. Funkcija [tt]realloc()[/tt] kao drugi argument prima [b]novu velicinu niza[/b] ([tt](brojKlubova+1) * sizeof(klub)[/tt]), a ne [strike]kolicinu dodane memorije[/strike] ([tt]sizeof(klub)[/tt]).[/quote]
Da da, hvala puno :)
vsego (napisa): |
Ti si to zaobisao globalnim varijablama (koje, opcenito, nisu bas najsretnija programerska praksa). Inace, ako zelis reci
tablica=(klub*) realloc(tablica, ...);
a tablica je lokalna varijabla (argument funkcije), stvar nece sljakati (vidi sto sam neki dan pisao o varijabilnim argumentima). Tu ti treba varijabla koja je pointer na tvoj niz klubova. Posto je niz tipa klub*, pointer na njega je klub**, a tvoja realokacija tada postaje
*tablica=(klub**) realloc(*tablica, ...);
|
A ako funkciji pošaljem (već u mainu definiran) tablica, zar to nije ekvivalentno s &tablica[0] pa je to onda varijabilni argument?
Citat: | Tebi se rusi zbog krive realokacije. Funkcija realloc() kao drugi argument prima novu velicinu niza ((brojKlubova+1) * sizeof(klub)), a ne kolicinu dodane memorije (sizeof(klub)). |
Da da, hvala puno
|
|
[Vrh] |
|
vsego Site Admin
Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (355F)16
Spol:
Lokacija: /sbin/init
|
Postano: 21:11 čet, 31. 5. 2012 Naslov: |
|
|
[quote="quark"]A ako funkciji pošaljem (već u mainu definiran) [tt]tablica[/tt], zar to nije ekvivalentno s [tt]&tablica[0][/tt] pa je to onda varijabilni argument?[/quote]
Da, [tt]*tablica[/tt] iliti [tt]tablica[0][/tt] [b]je[/b] varijabilni (tj. original), ali sama varijabla [tt]tablica[/tt] je kopija. Posto ti kod realokacije imas [tt]tablica = ...[/tt], mijenjas tu kopiju.
Nisi poslusao moj savjet i procitao [url=http://degiorgi.math.hr/forum/viewtopic.php?p=171658#171658]moj post o varijabilnim argumentima[/url], je l' da? :P
quark (napisa): | A ako funkciji pošaljem (već u mainu definiran) tablica, zar to nije ekvivalentno s &tablica[0] pa je to onda varijabilni argument? |
Da, *tablica iliti tablica[0] je varijabilni (tj. original), ali sama varijabla tablica je kopija. Posto ti kod realokacije imas tablica = ..., mijenjas tu kopiju.
Nisi poslusao moj savjet i procitao moj post o varijabilnim argumentima, je l' da?
_________________ 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] |
|
|