Dynamicky alokované pole stringů v c/c++ – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dynamicky alokované pole stringů v c/c++ – C / C++ – Fórum – Programujte.comDynamicky alokované pole stringů v c/c++ – C / C++ – Fórum – Programujte.com

 

Tkidrev
~ Anonymní uživatel
2 příspěvky
19. 12. 2011   #1
-
0
-

Potřebuju poradit s vytvořením dynamického pole stringů.

Chtěl bych do něj ukládat názvy specifických souborů ve složce - a předem nevím kolik jich bude.

Zkoušel jsem to pomocí malloc i pomocí new ale v obou případech mi program zkolabuje.
PS: Chtěl bych to zkusit udělat pomocí pole a ne pomocí vektoru atp.

const int rozsah = 100;
int pocet = 0;
string *pole = (string*)malloc(rozsah * sizeof(string));

//pozdeji pri prohledavani slozky, najde soubor 
//a ma ulozit nazev, ale program spadne hned u prvniho souboru
pole[pocet]= soubor.name;
pocet++

//k realokaci se program ani nedostane, ale myslim, 
//ze ji mam taky nejak spatne

if(pocet>=rozsah)
{
  pole = (string*)realloc(pole,(pocet+1)*sizeof(string));
}


Pomocí new jsem to zkoušel takto: 

string *pole = new string[rozsah];

//pomoci new to funguje a uklada nazvy souboru,
// ale jen do te doby nez prekroci rozsah
// a ma zacit realokovat potom program zhavaruje

pole[pocet]= soubor.name;
pocet++
if(pocet>=rozsah)
{
  pole = (string*)realloc(pole,(pocet+1)*sizeof(string));
}

Realokaci jsem použil z C, nevím jestli se dá velikost pole nějak realokovat v c++. Byl bych ale raději kdyby se mi to podařilo nějak udělat pomocí malloc a v případě, že bude souborů více než předem stanovený "rozsah" rozšířit pole pomocí realloc.
Poraďte prosím kde mám chybu.

Nahlásit jako SPAM
IP: 193.179.175.–
crazy
~ Moderátor
+10
Grafoman
19. 12. 2011   #2
-
0
-

#1 Tkidrev
nemůžeš použít realloc na něco, co si alokoval operátorem new...

a realokace v C++ se dělá, že si vytvoříš nové (větší) pole a prvky překopíruješ ze starého pole a pak zaměníš hodnotu starého pointeru za novou...

Nahlásit jako SPAM
IP: 147.32.113.–
All you need is vision and time.
yaqwsx+9
Posthunter
19. 12. 2011   #3
-
0
-

Proč si lámat hlavu s dynamickou alokací? Použij nějaký kontejner ze standardní knihovny...

Nahlásit jako SPAM
IP: 85.160.75.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Tkidrev
~ Anonymní uživatel
2 příspěvky
19. 12. 2011   #4
-
0
-

A pomocí toho malloc a realloc by se to dalo nějak?

Nahlásit jako SPAM
IP: 193.179.175.–
devilfish0
Stálý člen
19. 12. 2011   #5
-
0
-

#4 Tkidrev
Mne sa zda ze to mas dobre (s tym malloc) len ked volas realloc tak daj aspon rozsah*2 nie +1 lebo to ked dosiahnes limit tak budes volat realloc pri kazdom novom stringu

Nahlásit jako SPAM
IP: 188.121.172.–
liborb
~ Redaktor
+18
Guru
19. 12. 2011   #6
-
0
-

Problém je v tom, že string je objekt a při použití malloc se nejspíš nezavolá konstruktor (jenom se alokuje paměť, a to je málo). Použij new a re-alokaci jak ti radil crazy.

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 82.145.209.–
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, 142 hostů

Podobná vlákna

Pole objektů dynamicky? — založil Anonymní uživatel

Deklarace pole stringů — založil PiranhaGreg

Přidání Stringu do pole — založil Elopes

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ý