Hlavní navigace

Názor ke článku Bezpečné programování v C++ II od Radim Dostál - "Naše stará dobrá šablona funkce filter() dostala certifikát,...

  • 17. 3. 2009 19:59

    Radim Dostál (neregistrovaný)

    "Naše stará dobrá šablona funkce filter() dostala certifikát, který říká, že se výpočet zastaví v případě, že se zastaví callback funkce, kterou do funkce filter() posíláme jako parametr."

    Smělá hypotéza :-) Obávám se, že C a C++ dávají mnoho neuvěřitelných možností, proto podobným úvahám nepůjde nikdy plně důvěřovat. Co když:

    1) je chyba v metodě begin (neskončí)?
    2) je chyba v metodě end (neskončí)?
    3) je chyba v begin, nebo end a operátor ++ "posunující" iterátor nikdy nedojde z begin na end?
    3) je chyba v operátoru ++ pro iterátor (neskončí, nebo se neposune na další prvek)?

    Asi se bude jednat o list z STL. Opravdu tomu standardu tak věříte? Psali ho obyčejní lidé :-) Kdo ví jakým překladačem to bude překládáno a tedy jaká implementace STL bude použita.

    Kdyby jsme brali v úvahu, že STL je důvěryhodné, co když funkce, která příjde jako parametr je špatně napsaná. Sice skončí, ale zapíše něco do paměti tam, kam nemá. Při troše štěstí zapíše něco přesně na místo, kde je iterátor "it" a to tak, že ho posune zpět. Operátor++ a volaná funkce budou posouvat iterátor do nekonečna tam a zpět.

    Myslím, že potenciálních problémů je dost a to jsme ještě ani nevzali v úvahu fakt, že proces může mít více vláken, která sdílejí adresní prostor.