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

Delete [] – C / C++ – Fórum – Programujte.comDelete [] – C / C++ – Fórum – Programujte.com

 

Robo
~ Anonymní uživatel
82 příspěvků
4. 7. 2013   #1
-
0
-

Neviete niekto, prečo mi program stále spadne keď príde pri delete ?
To + 3 je tam kvôli čiarky, medzere a nulovému znaku

#include <iostream>
#include <cstring>

using namespace std;

int main()
{
	char name[20];
	char name2[20];
	char *ps;

	cout << "Zadajte vase meno: ";
	cin >> name;
	cout << "Zadajte vase priezvisko: ";
	cin >> name2;

	ps = new char [strlen(name) + strlen(name2) + 3];
	strncpy(ps, name, 20);
	strcat(ps, ", ");
	strncat(ps, name2, 20);

	cout << ps << endl;
	delete [] ps;

	system("PAUSE");
}
Nahlásit jako SPAM
IP: 188.112.118.–
me.name
~ Anonymní uživatel
66 příspěvků
4. 7. 2013   #2
-
0
-

#1 Robo
Netuším síce prečo ale keď som si tvoj program skopíroval pracoval bezchybne :)

Nahlásit jako SPAM
IP: 213.151.236.–
me.name
~ Anonymní uživatel
66 příspěvků
4. 7. 2013   #3
-
0
-

#1 Robo
Teraz ma tak napadlo podporuje tvoj kompilátor to že nemusíš písať return 0; ?

Nahlásit jako SPAM
IP: 213.151.236.–
Sefiros0
Návštěvník
4. 7. 2013   #4
-
0
-

Divný ... program funguje krásně ale Valgrind mi háže error takže tam ňákej memory leak bude. Tím return 0 to nebude.

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

no minimalne ma problem s tim strncpy.,.. 

Copies the first num characters of source to destination. If the end of the source C string (which is signaled by a null-character) is found before num characters have been copied, destination is padded with zeros until a total of num characters have been written to it.

dejme tomu ze meno1 bude 5znaku, meno2 budou 4 znaky... to mame alokovano 12znaku...  a strncpy tam nacpe nejmene 20 znaku ... pak se pripoji ", " takze druhej strncpy pokracuje od nejakeho ps[7] znaku dalsich 20bajtu...  takze buffer overflow jak vysitej  ...

taky ma problem s tim, ze nehlida tech 20 znaku na vstupech... kdyz da nejaky pekne dlouhy retezce, tak to vyhodi krasnej segfault (strncpy nepridava na konec \0 kdyz se dostane na ten 20znakovej limit!)

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

#5 KIIV
takže cin mi načíta reťazec a ostatné voľné miesta mi vyplní \0. Lenže strncpy číta len po \0 (alebo po rozsah) nulový znak tam už nevloží. Vloží ho automaticky, keď dosiahne požadovaný limit. 

Dá sa to ľahko obísť, že namiesto funkcií s n použijem funkcie bez n.
Ale to by mi moc nepomohlo, takže treba namiesto 20, dať presnú dĺžku a v prípade strncpy + 1

ps = new char [strlen(name) + strlen(name2) + 3];
strncpy(ps, name, strlen(name) + 1);
strcat(ps, ", ");
strncat(ps, name2, strlen(name2));
Nahlásit jako SPAM
IP: 188.112.118.–
KIIV
~ Moderátor
+43
God of flame
5. 7. 2013   #7
-
0
-

cin nacita jedno slovo libovolne dlouhe, at uz mas misto nebo ne...

strncpy kopiruje vsechno do poctu znaku (tedy tech 20) nicmene nepridava \0 takze pokud je nactene slovo delsi, nepokracuje sice dal, ale ani se nezkopiruje nic jako konec (podobne i strncat - kopiruje jeden koncovej znak, ale musi se objevit v tech 20 znacich... jinak mas smulu a zase neukonceno)

tj. furt ses nezbavil hlavniho problemu s tim cin..

Nahlásit jako SPAM
IP: 86.49.86.–
Program vždy dělá to co naprogramujete, ne to co chcete...
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

::delete — založil Koudis

Delete v GridView — založil lost

DELETE v MySQL — založil Systém

C++ - BVS - delete — založil tomas

Delete na pointer — založil Kolemjdouci

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ý