From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Ian Farquharson" To: Subject: This C++ code fails Date: Mon, 15 Mar 1999 03:05:00 -0000 Message-id: <000001be6ed3$ff014260$c801a8c0@warpcore> X-SW-Source: 1999-03/msg00474.html This small test program demonstrates a problem I am having with virtual base classes and a pointer to member. When I try to call a function in a class that has virtual base classes through a pointer to member the program crashes. I have compiled and run this same test successfully under Borland C++ 5.02 I am using cygwin B20.1 with EGCS 1.1.1 installed. You can compile the test using the command "gcc Try.cpp -o Try.exe". When the program is run I get the following output: bash-2.02$ gcc try.cpp -o try.exe bash-2.02$ ./try Calling Test1::Click directly. void Test1::Click(void) Calling Test1::Click through pointer to member. void Test1::Click(void) Calling Test2::Click directly. void Test2::Click(void) Calling Test2::Click through pointer to member. [main] D:\race\test\try.exe 1016 (0) handle_exceptions: Exception: STATUS_ACCESS _VIOLATION [main] try 1016 (0) handle_exceptions: Dumping stack trace to try.exe.core The Test2 class is using virtual base classes, unlike the Test1 class. This difference causes an exception to be thrown when the pointer to member is used. Any help would be much appreciated. From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Ian Farquharson" To: Subject: This C++ code fails Date: Wed, 31 Mar 1999 19:45:00 -0000 Message-ID: <000001be6ed3$ff014260$c801a8c0@warpcore> X-SW-Source: 1999-03n/msg00474.html Content-type: multipart/mixed; boundary="----------=_1583532709-65105-23" Message-ID: <19990331194500.ZD60R6iY0fwWWUBuzjKvxeaYKLgUagFubpv6qymAOww@z> This is a multi-part message in MIME format... ------------=_1583532709-65105-23 Content-length: 1123 This small test program demonstrates a problem I am having with virtual base classes and a pointer to member. When I try to call a function in a class that has virtual base classes through a pointer to member the program crashes. I have compiled and run this same test successfully under Borland C++ 5.02 I am using cygwin B20.1 with EGCS 1.1.1 installed. You can compile the test using the command "gcc Try.cpp -o Try.exe". When the program is run I get the following output: bash-2.02$ gcc try.cpp -o try.exe bash-2.02$ ./try Calling Test1::Click directly. void Test1::Click(void) Calling Test1::Click through pointer to member. void Test1::Click(void) Calling Test2::Click directly. void Test2::Click(void) Calling Test2::Click through pointer to member. [main] D:\race\test\try.exe 1016 (0) handle_exceptions: Exception: STATUS_ACCESS _VIOLATION [main] try 1016 (0) handle_exceptions: Dumping stack trace to try.exe.core The Test2 class is using virtual base classes, unlike the Test1 class. This difference causes an exception to be thrown when the pointer to member is used. Any help would be much appreciated. ------------=_1583532709-65105-23 Content-Type: text/x-c++; charset=us-ascii; name="Try.cpp" Content-Disposition: inline; filename="Try.cpp" Content-Transfer-Encoding: base64 Content-Length: 3217 LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcCiogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKgoqIFRlc3QgcHJvZ3JhbSB0aGF0IGRl bW9uc3RyYXRlcyBidWcgd2l0aCB2aXJ0dWFsIGJhc2UgY2xhc3NlcyBhbmQg cG9pbnRlciAgICoKKiB0byBtZW1iZXIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq CiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgoqIEF1dGhvcjog SWFuIEZhcnF1aGFyc29uIChpZmFycXVoYUBpaHVnLmNvLm56KSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICoKKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqClwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq LwoKI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCi8v IENsYXNzIGRlY2xhcmF0aW9ucyA9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKY2xhc3MgQmFzZTEK ewpwdWJsaWM6CiAgdmlydHVhbCB+QmFzZTEodm9pZCk7Cn07CgpjbGFzcyBC YXNlMgp7CnB1YmxpYzoKICB2aXJ0dWFsIH5CYXNlMih2b2lkKTsKICB2aXJ0 dWFsIHZvaWQgQ2xpY2sodm9pZCk7Cn07CgpjbGFzcyBUZXN0MTogcHVibGlj IEJhc2UxLCBwdWJsaWMgQmFzZTIgICAgICAgICAgICAgICAgIC8vIE5COiBu b24tdmlydHVhbAp7CnB1YmxpYzoKICB2aXJ0dWFsIH5UZXN0MSh2b2lkKTsK ICB2aXJ0dWFsIHZvaWQgQ2xpY2sodm9pZCk7Cn07CgpjbGFzcyBUZXN0Mjog dmlydHVhbCBwdWJsaWMgQmFzZTEsIHZpcnR1YWwgcHVibGljIEJhc2UyIC8v IE5COiB2aXJ0dWFsCnsKcHVibGljOgogIHZpcnR1YWwgflRlc3QyKHZvaWQp OwogIHZpcnR1YWwgdm9pZCBDbGljayh2b2lkKTsKfTsKCi8vIENsYXNzIGlt cGxlbWVudGF0aW9uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQoKQmFzZTE6On5CYXNlMSh2b2lkKQp7 Cn0KCkJhc2UyOjp+QmFzZTIodm9pZCkKewp9Cgp2b2lkIEJhc2UyOjpDbGlj ayh2b2lkKQp7CiAgcHJpbnRmKCJ2b2lkIEJhc2UyOjpDbGljayh2b2lkKVxu Iik7Cn0KClRlc3QxOjp+VGVzdDEodm9pZCkKewp9Cgp2b2lkIFRlc3QxOjpD bGljayh2b2lkKQp7CiAgcHJpbnRmKCJ2b2lkIFRlc3QxOjpDbGljayh2b2lk KVxuIik7Cn0KClRlc3QyOjp+VGVzdDIodm9pZCkKewp9Cgp2b2lkIFRlc3Qy OjpDbGljayh2b2lkKQp7CiAgcHJpbnRmKCJ2b2lkIFRlc3QyOjpDbGljayh2 b2lkKVxuIik7Cn0KCi8vIFJ1blRlc3QxIGRlbW9uc3RyYXRlcyBhIGNsYXNz IHVzaW5nIG11bHRpcGxlIGluaGVyaXRlbmNlID09PT09PT09PT09PT09PT09 PQoKdHlwZWRlZiB2b2lkIChUZXN0MTo6KlRlc3QxUHJvYykodm9pZCk7Cgp2 b2lkIFJ1blRlc3QxKHZvaWQpCnsKICBUZXN0MSB0ZXN0OwoKICBwcmludGYo IkNhbGxpbmcgVGVzdDE6OkNsaWNrIGRpcmVjdGx5LlxuIik7CiAgdGVzdC5D bGljaygpOwoKICBwcmludGYoIkNhbGxpbmcgVGVzdDE6OkNsaWNrIHRocm91 Z2ggcG9pbnRlciB0byBtZW1iZXIuXG4iKTsKICBUZXN0MVByb2MgcHJvYyA9 ICZUZXN0MTo6Q2xpY2s7CiAgKHRlc3QuKnByb2MpKCk7Cn0KCi8vIFJ1blRl c3QyIGRlbW9uc3RyYXRlcyBhIGNsYXNzIHVzaW5nIG11bHRpcGxlIHZpcnR1 YWwgaW5oZXJpdGVuY2UgPT09PT09PT09PQoKdHlwZWRlZiB2b2lkIChUZXN0 Mjo6KlRlc3QyUHJvYykodm9pZCk7Cgp2b2lkIFJ1blRlc3QyKHZvaWQpCnsK ICBUZXN0MiB0ZXN0OwoKICBwcmludGYoIkNhbGxpbmcgVGVzdDI6OkNsaWNr IGRpcmVjdGx5LlxuIik7CiAgdGVzdC5DbGljaygpOwoKICBwcmludGYoIkNh bGxpbmcgVGVzdDI6OkNsaWNrIHRocm91Z2ggcG9pbnRlciB0byBtZW1iZXIu XG4iKTsKICBUZXN0MlByb2MgcHJvYyA9ICZUZXN0Mjo6Q2xpY2s7CiAgKHRl c3QuKnByb2MpKCk7Cn0KCi8vIG1haW4gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQoKaW50IG1haW4oaW50LCBjaGFyKiBbXSkKewogIFJ1blRlc3QxKCk7 CiAgUnVuVGVzdDIoKTsKICByZXR1cm4gMDsKfQoKCg== ------------=_1583532709-65105-23--