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

Set_terminate – C / C++ – Fórum – Programujte.comSet_terminate – C / C++ – Fórum – Programujte.com

 

Martin Kozibrátka0
Stálý člen
19. 7. 2012   #1
-
0
-

Zdravim guru.

potřebuji se zeptat jak funguje registrace funkce pomocí set_terminate. Vím jak se používá. Nevím však jeho vnitřní princip. V dokumentaci se píše, že pomocí této funkce zaregistruji jinou funkci, která bude volána při nezachycené vyjímce. Kam ji zaregistruji? Kam se ta adresa funkce uloží? Je to pouze adresa pro překladač, který ji poté použije při nezachycení vyjímky? Samotný překladač musí vědět, kterou funkci při nezachycení volat?

Nahlásit jako SPAM
IP: 46.28.104.–
Savana.cz - neomezený webhosting za pár kaček :)
KIIV
~ Moderátor
+43
God of flame
19. 7. 2012   #2
-
0
-

Princip je obvykle takovy, ze zkompilovany program ma nejaky defaultni terminate handler - nekde je v pameti umisten, ceka presne definovane parametry a nekde musi byt i umistena adresa co se ma zavolat.

Set terminate pak akorat bud zmeni tuto adresu, nebo se prida pred ni - muze se pak dejme tomu zavolat prvni a pokud nevrati konkretni hodnotu tak se budou volat i nasledujici ..

Mozna by ti stacilo procist si neco o "handlerech" - princip je v naproste vetsine stejny - nekde mas predem pocitano ze se tam da zaregistrovat funkce urciteho prototypu, preda se jen pointer na ni - tim se pak da zavolat cokoliv... Pak uz jen pri vyvolani urcite udalosti kod zjisti, zda je handler nastaven a zavola ho

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Martin Kozibrátka0
Stálý člen
19. 7. 2012   #3
-
0
-

Díky KIIV

ještě mám dotaz na size_t

Chápu správně, že je to typ unsigned int a to právě proto, aby se do něj vešla hodnota např ze sizeof, který může vracet tak velký počet bytů, že by se to do int nevešlo? Kdybych tam dal například obrovské pole.

Mělo by to mít něco společného i s typem systému, na kterém se aplikace provádí. Tedy 32 nebo 64.

Byl bych rád kdyby to tu někdo objasnil.

Dále....je omezena velikost pole? Řekněme, že si budu alokovat místo pro pole pomocí new. Je to omezeno nějakou hodnotou? Nemá to souvislost s tím size_t, že bych mohl alokovat max tolik kolik bytů se vejde do size_t?

díky

Nahlásit jako SPAM
IP: 46.28.104.–
Savana.cz - neomezený webhosting za pár kaček :)
yaqwsx+9
Posthunter
19. 7. 2012   #4
-
0
-

#3 Martin Kozibrátka
size_t je v dokumentaci definován jako typ, který je schopen pojmout jakoukoliv velikost (paměti) na dané platformě. V 32bit aplikacích je to skutečně uint32_t.

Operátor new je teoreticky schopen naalokovat tolik paměti, na kolik může existovat pointer - opět jsme u uint32_t. Avšak skutečnost je jiná - netuším jestli to byla diskuse na game-dev.net nebo ceske-hry.cz, ale řešilo se tam alokování velkého bloku paměti. Je to platformově závislé a dokonce se tam ukázalo, že nedá spoléhat na NULL pointer, který by new mělo vrátit při neúspěšném alokování. Na některých linuxových distribusí při alokování 2GB  bloku byl vrácen platný pointer, ale při pokusu o zápis do paměti byla aplikace systémem ukončena. Pokusím se tu diskusi někde najít - bylo to zajímavé počtění.

Nahlásit jako SPAM
IP: 85.160.49.–
Life is too short to remove USB mass storage safely...
Správný drsňák udělá z konzole cokoliv
Martin Kozibrátka0
Stálý člen
19. 7. 2012   #5
-
0
-

Díky to by bylo skvělé.

Nahlásit jako SPAM
IP: 46.28.104.–
Savana.cz - neomezený webhosting za pár kaček :)
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, 54 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ý