Tak w ramach przygotowań do kolokwium wymyślałem sobie problemy i wyszło mi to co poniżej prezentuję.
Poniższy kod powoduje (a przynajmniej powinien) naruszenie ochrony pamięci:
class A { protected: char *t; public: A(int i = 1) : t(new char[i]) {}; ~A(){ delete [] t; }; }; class B : virtual public A { private: int m_ElementsCount; public: B(int elementsCount) : A(elementsCount), m_ElementsCount(elementsCount) {}; int writeElement(unsigned int i, unsigned int k){ if(i < m_ElementsCount){ t[i] = k; return 0; } else return 1; }; }; class C : public B{ public: C(int elementsCount) : B(elementsCount) {}; }; int main(int argc, char **argv){ C myC(100); myC.writeElement(99, 2); return 0; }
Żeby go poprawić wystarczy usunąć jeden wyraz (blok funkcji main zostawiamy w spokoju).
Odpowiedź po kliknięciu “więcej”.
(więcej…)