Lekce 10: Jak mám postupovat, když chci alokovat místo pro pole? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Lekce 10: Jak mám postupovat, když chci alokovat místo pro pole? – C / C++ – Fórum – Programujte.comLekce 10: Jak mám postupovat, když chci alokovat místo pro pole? – C / C++ – Fórum – Programujte.com

 

Huge0
Návštěvník
8. 10. 2006   #1
-
0
-

Zkoušel jsem to asi takhle, ale řek bych, že to nebude to prvé ořechové...

long * PolickoBrambor[22];
for(int i=0; i<23; i++)
PolickoBrambor[i]=new long;
:?

Nahlásit jako SPAM
IP: ...–
Jura_0
Stálý člen
8. 10. 2006   #2
-
0
-

Huge napsal:

Zkoušel jsem to asi takhle, ale řek bych, že to nebude to pravé ořechové...

long * PolickoBrambor[22];
for(int ii=0; ii<23; ii++)
PolickoBrambor[ii]=new long;
:


Z tveho dotazu mi neni jasne, co vlastne potrebujes. Totiz to, co jsi tu napsal je pole ukazatelu. Pokud jsi chtel tohle, tak pak je to vporadku(az na ty meze) a k jednotlivym polozkam pole pristupujes pres *PolickoBrambor[index]= 5;, ale pokud chces alokovat jen dynamicke pole, tak na to staci:


long * PolickoBrambor = new long[22];
//Potrebne kontroly
PolickoBrambor[0] = 5;

delete [] PolickoBrambor;

Nahlásit jako SPAM
IP: ...–
Adam Streck0
Stálý člen
8. 10. 2006   #3
-
0
-

Je to OT, ale p?ijde mi zbyte?n? kv?li tomu zakl?dat novej topic - p?ed ned?vnem jsem pracoval s polem struktur (Vector), kter? mi ukl?daly pozice kostek na obrazovce. To pole se alokovalo podle pot?eby (zad?no u?ivatelem), vypo??talo, pak se vykreslil obsah a pak bylo zase zru?en? pomoc? delete [], p?i nov?m vstupu zase alokov?no, pro jinou hodnotu. Z n?jak?ho d?vodu se ale stalo ?e ur?it? ??st obsahu prost? z?stala - v p??pad? ?e jsem alokoval men?? pole, tak se prost? stalo ?e po??ta? vykreslil prvky kter? ?ly jakoby "p?es" obsah pole - ?ili:
Alokoval jsem 20 prvk?, vykreslil, zru?il.
Pak jsem alokoval 15, vykreslil je na jin?ch m?stech, ale tak? jsem vykreslil 15-20 na m?stech kde byly um?st?ny pro 20 polo?ek. Na druhou stranu kdy? bylo alokov?no t?eba pro 50, a pak pro 35, tak to vykreslilo ?patn? t?eba jen 20-25 a 26-35 a u? zase spr?vn? a 36-50 u? ne , prost? celkem podivn? chov?n?.
Jedin? co mi pomohlo bylo ZeroMemory(). Nev?te ??m to je?

Nahlásit jako SPAM
IP: ...–
Jura_0
Stálý člen
8. 10. 2006   #4
-
0
-

Asan napsal:

Je to OT, ale přijde mi zbytečné kvůli tomu zakládat novej topic - před nedávnem jsem pracoval s polem struktur (Vector), které mi ukládaly pozice kostek na obrazovce. To pole se alokovalo podle potřeby (zadáno uživatelem), vypočítalo, pak se vykreslil obsah a pak bylo zase zrušené pomocí delete [], při novém vstupu zase alokováno, pro jinou hodnotu. Z nějakého důvodu se ale stalo že určitá část obsahu prostě zůstala - v případě že jsem alokoval menší pole, tak se prostě stalo že počítač vykreslil prvky které šly jakoby "přes" obsah pole - čili:
Alokoval jsem 20 prvků, vykreslil, zrušil.
Pak jsem alokoval 15, vykreslil je na jiných místech, ale také jsem vykreslil 15-20 na místech kde byly umístěny pro 20 položek. Na druhou stranu když bylo alokováno třeba pro 50, a pak pro 35, tak to vykreslilo špatně třeba jen 20-25 a 26-35 a už zase správně a 36-50 už ne , prostě celkem podivné chování.
Jediné co mi pomohlo bylo ZeroMemory(). Nevíte čím to je?


Tohle chovani je opravdu podivne, jen mi neprijde, ze by s tim melo co docineni C++, protoze jakmile se zavola operator delete/delete [], tak sice nedojde k zadnemu uvolneni pameti(fyzicky), ale o tomto prostoru operator prohlasi, ze jej jiz nadale nebude potrebovat a tim se vrati systemove prostredky. Samozrejmosti po pouziti by melo byt to pole/promennou inicializovat na 0(NULL). Ale jednak, tohle neni odpoved na tvoji otazku a prijde mi nepravdepodobne, ze by inicializace na 0 neco ovlivnila, a druhak, abych se priznal sam nevim, cim by to mohlo byt. Snad me jen napada, jestli to neni zalezitosti rozhrani, ktere pouzivas pro vykreslovani(Direc3D, OpenGL...).

Nahlásit jako SPAM
IP: ...–
Adam Streck0
Stálý člen
8. 10. 2006   #5
-
0
-

Bylo to skrze D3D9 - problém se vyskytoval jen u vstupu 7-9 (jednalo se o počet kostek strany pyramidy). U čísel 1-6 a 10-999 problém nebyl.

Nahlásit jako SPAM
IP: ...–
Huge0
Návštěvník
12. 10. 2006   #6
-
0
-

Hele, moc tomu nerozum?m, tak nap??klad pro? se prvek toho alokovan?ho pole inicializje

PolickoBrambor[0] = 5;
a ne
*PolickoBrambor[0] = 5;
d?le co je my?leno t?m
//Potrebne kontroly
a to maz?n?
delete [] PolickoBrambor;
je taky zaj?mav?, ikdy? pochopiteln? (to [] znamen? jako v?echny prvky, ne?)
Taky po??d nech?pu jak ud?lat ukazatel na pole.
D?ky za odpov?di, ale budu vd??nej i za link na tyto informace.

Nahlásit jako SPAM
IP: ...–
Marek0
Návštěvník
12. 10. 2006   #7
-
0
-

Pretoze 'long *' nie je to iste ako 'char *'

// potrebne kontroly // myslim, ze to znamena to, ze si musis dat pozor v kladani cisel do pola, pretoze alokujes pamat pre 22 cisel, ale ako vies index pola zacina od 0 a nie od 1, takze index konci pri 21 a nie 22.

// delete [] PolickoBrambor; // no a tymto prikazom manualne uvolnujes alokovanu pamat. Ukazovatel mazes prikazom 'delete pf' bez [].

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 105 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý