Jump to content

Debugowanie programu


Wosiedem

Recommended Posts

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 to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...