Skocz do zawartości

Debugowanie programu


Wosiedem

Polecane posty

Od razu powiem, że to nie jest "ej, dlaczego mi to nie działa" (choć przyznaję, że sam nie znam odpowiedzi)...

Poniżej wklejam kod, który nie działa pod Visual Studio 2008. Co znaczy nie działa? Program się wykrzacza, ale nie jest to nic trywialnego (pod gcc śmiga). O co tu chodzi? Wywalamy wyjątek (klasę ex) i potem próbujemy coś wyświetlić. Ciekawostką jest fakt, że obiekt przekazany przez referencję ma inny adres w pamięci (sic!). Nie jestem wstanie tego pojąć. Dodatkowo, gdy usuniemy któryś z komentarzy program zaczyna działać. Oczywiście próbowałem też kompilować z i bez optymalizacji itp - nadal to samo. Heca! Ktoś wie ocb?

#include <iostream>
#include <cstring>
using namespace std;

class Ex
{
       char* str;
public:
       Ex(const char* st)
       {
               str=new char[strlen(st)+1];
               strcpy(str,st);
               cerr << "Konstruktor " << this << endl;
       }

       /*Ex(const Ex& e)
       {
               cerr << "Kopia " << this << " " << &e << endl;
               str="Kopia";
       }*/

       //virtual 
               const char* co() const {cerr << "Co " << this << endl;
                       return str;}

               //virtual
       ~Ex()
       {
               cerr << "Destruktor " << this << endl;
               delete [] str;
       }

       //virtual void f(){}
};


int main(int argc, char** argv)
{
       try
       {
               throw Ex("ERR");
       }
       catch(const Ex& e)
       {
               cerr << "Catch" << endl;
               cout << e.co() << endl;
       }
       return 0;
}

Pozdrawiam,

vo7 (;

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...