streda, 1. júna 2011

V čom je chyba?

V jednom C++ kóde som spravil chybu a relatívne ma to prekvapilo. Aj keď po tom čo som si uvedomil, že to je chyba tak to bolo hneď zrejmé. Zjednodušene som túto chybu zaniesol do nasledujúceho kódu - nájdete chybu/chyby? Viete povedať čo sa stane bez toho aby ste spustili tento kód? A ako by ste ho opravili?

#include <string.h>

 
class A
{
public:
       A()
       {
              Initialize();
       }

      
~A()
       {
              Deinitialize();
       }

      
virtual void Initialize()
       {
       }

      
virtual void Deinitialize()
       {
       }
};
 
class B : public A
{
public:
       char *m_pMemory;
       B()
       {
              m_pMemory = NULL;
       }
 
       virtual void Initialize()
       {
              m_pMemory = new char[ 200];
              strcpy( m_pMemory, "Pekne nam to funguje\n");
       }
 
       virtual void Deinitialize()
       {
              if ( m_pMemory)
                     delete []m_pMemory;
       }
 
       char *GetMemory()
       {
              return m_pMemory;
       }
};
 
int _tmain(int argc,  _TCHAR* argv[])
{
      
B b;

      
printf( b.GetMemory());
 
       return 0;
}