From: mrkite AT cyberjunkie DOT com (Marco Salvalaggio) Newsgroups: comp.os.msdos.djgpp Subject: Serious djgpp problem with exceptions ? Date: Sat, 01 Feb 1997 12:04:11 GMT Lines: 89 Message-ID: <32f93129.6685902@news.ind.mh.se> NNTP-Posting-Host: ppp-165.mclink.it Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Hi all, this is a second post, since nobody replied to the first posted a week ago. Unless I'm doing some stupid mistake, this can be a serious djgpp problem. I'm trying to port an app that works fine with BC++ 4.5 and, though it compiles ok with djgpp, it doesn't behave as I expect at run- time. In this app I have a hierarchy of exception classes so that I can detect different error conditions and/or exploit the power of polymorphism. The problem is that trying to catch an exception object of base class type when a derived exception obj was thrown causes the prog to terminate(). To simplify the question here comes a little program that behaves the same way. -------------------------------------------------------------------------------------------------- // Except.cc // // Testing djgpp exception handling. // #include #include class MyExcept { char msg[80]; public: MyExcept(const char *s) { strcpy(msg, s); } virtual void why() { cout << endl << msg << flush; } }; class MyOtherExcept : public MyExcept { int dummy; public: MyOtherExcept( const char *s, int n ) : MyExcept(s), dummy(n) {} void why() { MyExcept::why(); cout << ' ' << dummy << flush; } }; void f1(); void f2(); void main() { try { f1(); } catch( MyExcept& x ) // This one ok MyExcept thrown, MyExcept catched { x.why(); } try { f2(); } catch( MyExcept& x ) // This one not ok. The program aborts. { x.why(); } } void f1() { throw(MyExcept("Error in f1()")); } void f2() { throw( MyOtherExcept("Error in f2()", 16) ); } -------------------------------------------------------------------------------------------------- Compiled with BC++ 4.5 this one gives the correct output: Error in f1() Error in f2() 16 compiled with djgpp with the following command: gcc -fhandle-exceptions except.cc -lstdcx -liostr it gives: Error in f1()Abort ! Thanks in advance to anyone that will reply me. Marco.