Odpověď na názor

Odpovídáte na názor ke článku SEH v Linuxu (C++).

  • 5. 9. 2012 15:01

    Ondřej Novák (neregistrovaný)

    [1] Tak není to o C++, ale o tom, jak udělat SEH v C++. C++ jazyk se musí občas použít i na nějaké té nízké úrovni.

    Každý nástroje je tak dobrý, jak správně je použit. Nikdo přece neříká, že je správné na začátku programu dát try a na konec except a napravovat nějaký náhodný pád. Ale pokud musím pracovat s blokem paměti, který během práce může být třeba uvolněn, nebo stát se nedostupným, například SIGBUS: Ten neovlivníte. Nezajistíte, že vám někdo při práci nevytáhne flashku z USBčka, na které máte namapovaný kus souboru do paměti.

    Ano, asi je dobré říct, že bezpečnější je to použít jen ke čtení a to ještě velmi opatrně. Já například na to narazil při implementaci sdíleného spojového seznamu bez zamykání. Tam je v jeden moment operace derefernece pointeru a vyzvednotí hodnoty "next" z paměti. Ale co když tu paměť někdo mezitím uvolnil, odmapoval, zamknul? Dokážu vrácenou hodnotu zvalidovat a zjistím, že není platna, ale nedokážu odvrátit neplatnému přístupu do paměti.

    Napište na google dotaz IsBadReadPtr on Linux a naleznete spoustu diskuzí, kde se najdou problémy, které podobné veci řeší. To vedlo k implementaci tohoto systému (IsBadReadPtr je ve Windows obsolete a řeší se to právě pomocí SEH)