Dynamické polia C++ – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dynamické polia C++ – C / C++ – Fórum – Programujte.comDynamické polia C++ – C / C++ – Fórum – Programujte.com

 

Filip
~ Anonymní uživatel
121 příspěvků
6. 7. 2013   #1
-
0
-

Chcel by som sa ujistiť, či mám dobré myslenie v danej veci

char *temp[] = {"Januar", "Februar", "Marec", "April", "Maj", "Jun", "Jul", "August", "September", "Oktober", "November", "December"};

Tento kód mi vytvorí "12 riadkov v pamäti ". Pre * nemusím alokovať žiadne miesto, pretože každý reťazec má pridelenú adresu v pamäti, takže si to doplní sám.

char *temp[5];
	char slovo[10];

	int i = 0;
	while(i < 5){
		cin >> slovo;
		temp[i] = new char[strlen(slovo) + 1];
		temp[i] = slovo;
		cout << temp[i++] << endl;
	}

Tento kód mi vytvorí v pamäti 5 riadkov a na každý riadok vytvorí smerník, ktoré je potrebné vytvoriť v pamäti miesto podľa zadaného slova.

char slovo[10];
	int i = 0;

	char **temp = new char*[5];
	while(i < 5){
		cin >> slovo;
		temp[i] = new char[strlen(slovo) + 1];
		temp[i] = slovo;
		cout << temp[i++] << endl;
	}

Tento kód mi vytvorí smerník na smerník, kde je treba vytvoriť v pamäti n smerníkov. Následne je ešte potrebné každému smerníku vytvoriť požadované miesto v pamäti.

Chcel by som sa teda spýtať, či mám kódy dobre, či nerobím niekde chybu (aj v uvažovaní). Dík

Nahlásit jako SPAM
IP: 188.112.123.–
KIIV
~ Moderátor
+43
God of flame
6. 7. 2013   #2
-
0
-

cin >> slovo;  je vcelku nebezpecne... zadna ochrana proti preteceni bufferu, jakmile ti nekdo zada slovo delsi nez 9 znaku.

retezce se kopiruji jinak... ted tam mas memory leak - alokujes pamet a pak okamzite znicis ten novej pointer tim, ze misto nej zapises pointer na zacatek promenne "slovo"

Nahlásit jako SPAM
IP: 86.49.86.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Filip
~ Anonymní uživatel
121 příspěvků
6. 7. 2013   #3
-
0
-

Ono to neni ošetrené. To bolo brané tak, že to bude max jedno slovo o dlžke 9. Ináč by som dal
cin.getline(slovo, 10);
Myslíš strcpy / strncpy ? Ja som to tam robil pre string, čo bolo zle.
Takže by som to dal strcpy(temp[i], slovo);

 

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

Podobná vlákna

3 polia — založil WhatsThiSs

Polia v C++ — založil Jur

C programovanie , polia — založil WhatsThiSs

Objekt a polia? — založil WraCkeR

Metody a premenne(polia) — založil jonatan

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ý