lapsus alumni

czerwiec 3, 2007

Znajdź błąd #1: Dziedziczenie

Zaszufladkowany do: Programowanie — elmopl @ 7:03 pm

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…)

Blog na WordPress.com.