gcc bzw g++ bug?



  • Hi @all

    folgender Code spuckt unter Eclipse CDT mit cygwin gcc "Bar" aus, obwohl er das doch wohl nicht tun sollte. Kann mir dass jemand erklären?

    #include <iostream>
    using namespace std;
    
    class Foo
    {
    public:
    	void Bar()
    	{
    		cout << "Bar" << std::endl;
    	}
    };
    int main() {
    	Foo* t = 0;
    	t->Bar();
    	return 0;
    }
    

    Gruß
    Tobi



  • Die pedantische Antwort:

    du greifst auf einen NULL Zeiger zu, das bedeutet undefiniertes verhalten. Ergo kann alles passieren.

    Die technische Antwort:
    Ein Methoden zugriff der non virtual ist, ist in Asm etwa sowas:
    p->methode(1,2);

    push 2
    push 1
    mov ecx, p
    call methode
    

    oder in C code:

    void Foo__bar(FooType* const this, int a, int b) {
      //...
    }
    

    Solange also this 0 ist und die methode non virtual und du nicht auf this zugreifst (zB member variablen ansprichst) geht alles gut.

    Es gibt natürlich keine garantie dass das der Fall ist, aber meistens ist es so.



  • Danke für die Antwort,

    ist mir schon klar, dass man das nicht so machen soll. Ich hab mich nur gewundert warum es nicht gleich kracht.

    Aber nach deiner Erklärung leuchtet das gezeigte Verhalten ein 👍

    Danke...

    Gruß
    Tobi


Anmelden zum Antworten