» »

Dinamične strukture

Dinamične strukture

Wilhelm ::

Hi
Ravno pišem nek program pa se mi je nekaj zapletlo s strukturami. Tukaj sem napisal simlpe primer, da pokažem v čem je moj problem. Kot lahko vidite imam dve strukturi:

struct oseba
{
char ime[10];
char priimek[10];
};

struct prebivalci
{
char kraj [10];
oseba* os;
};

prebivalci* pr=new prebivalci[4]; // to je še v redu
pr->os=new oseba[3];


pr->(os+2)->ime[0]='M'; //tu se pa pojavi problem(ne morem dostopati do te strukture)

Ma kdo kako idejo?

NavadniNimda ::

Probaj cast-ati (povej kaj javi tule):

((oseba * )(pr->(os+2)))->ime[0]='M';

(Nimam kompajlerja, pa ne morem probat :D Imam pa še eno idejo glede char*)

Zgodovina sprememb…

Wilhelm ::

Javi naslednjo napako:

error C2059: syntax error : '('

probal sem drugače postaviti oklepaje, pa ne gre

OwcA ::

Daj raje os[2] ali pa ((pr->os)+2)->ime
Otroška radovednost - gonilo napredka.

NavadniNimda ::

Res je, Owca, tuki bo.8-)

Wilhelm ::

V tem primeru, ki si ga napisal ti deluje.
Če pa napišem takole, kot bi rabil:
(((pr+3)->os)+2)->ime[0]='M';
pa mi javi napako:
Unhandled exception in Proba.exe 0xC0000005:Access Violation

NavadniNimda ::

Wilhelm, zdej pa počasi, ker sem že jaz zmeden.:))

Povej, kaj sploh hočeš tlele v originalu doseč (Samo en del izraza):
pr->(os + 2)

OwcA ::

Prebrati 3. osebo. Aritmetika s kazalci! ;)
Otroška radovednost - gonilo napredka.

NavadniNimda ::

Potem je pa postopoma:

oseba * q = new oseba[3];
pr->os = q[2]; //:D

Wilhelm ::

:) mogoče je res bolje da malo pojasnim celotno zadevo

kot bi imel eno več velikih skupin, ki se bil delila še na manjša
Npr.
(Slovenj Gradec - velika skupina)

notri imam tri prebivalce
Slovenj Gradec->oseba[2]->ime=Miha
Slovenj Gradec->oseba[2]->priimek=Nekdo
.
.
.

pol je pa tu druga
skupina

V programu, ki ga pišem je zadeva dost bolj kompleksna.

Wilhelm ::

Glede predprejšnjega posta. Tvoja rešitev ne deluje zaradi dveh problemov. Tako sploh ne moreš nasloviti kazalca. Če bi pa že to delalo potem bi se mi vsebina prepisovala (ker vse skupaj poteka v zanki)

NavadniNimda ::

Wilhelm: pr->os je pointer, ampak cel izraz skupaj je ena pomnilniška lokacija.

V vsako (pr->os) je potrebno vpisati kazalec na strukturo tipa 'oseba'. Imam občutek, kot da hočeš goljufat in alocirat pomnilnik v šubu naenkrat za več oseb - ne bo šlo. Če pa že to delaš, potem moraš ROČNO priredit vsakemu pr-ju naslednji pointer od osebe. Torej rewrite kode.:|

Wilhelm ::

Verjetno bom moral najt drugo rešitev.
Hvala za odgovore

Quikee ::

Zakaj pa ne kar enostavno pr[2].os[1].ime[0]='A'; ??
Drugace pa deluje tudi ((oseba*)((prebivalci*)pr+1)->os)->ime[0]='A'; samo zakaj bi kompliciral? =)

Zgodovina sprememb…

  • spremenil: Quikee ()

snow ::

> pr->os=new oseba[3];
pr == pr[0].

Aha. Kdo bo pa pr[1]->os dal en array? Pa pr[2]... itd?
V loopu daj vsem os (v vsaki strukturi) array.
Random mutation plus nonrandom cumulative natural selection - Richard Dawkins


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Kako rezervirati pomnilnik za neznano stevilo nizov?

Oddelek: Programiranje
11953 (768) smacker
»

Objektno programiranje Java

Oddelek: Programiranje
111372 (1230) Spartacus
»

[C#] izdelava tabele

Oddelek: Programiranje
71986 (1812) majoneza
»

strcpy reče segmatation fault

Oddelek: Programiranje
101491 (1442) MasterMind
»

C problemček

Oddelek: Programiranje
131058 (861) OwcA

Več podobnih tem