Mailinglist Archive: opensuse-programming-de (128 mails)

< Previous Next >
frage zu objecten in c++
  • From: Johanns Schneider <thc_gangsta@xxxxxx>
  • Date: Wed, 16 Nov 2005 22:50:12 +0100
  • Message-id: <437BA994.2040807@xxxxxx>
hi folkz
ich hab mal eine frage zu objecten in c++

und zwar habe ich folgenden code:

main.h:

using namespace std;

class test
{
public:
test();
~test();
void say(string toSay);
};

main.cpp:

#include <iostream>
#include <string>
#include "main.h"

using namespace std;

test::test()
{
cout << "test erstellt\n";
}

test::~test()
{
cout << this << " test getoetet\n";
}

void test::say(string toSay)
{
cout << toSay;
}

int main()
{
test Test = test();
Test.~test();
cout << "noch ist es nicht zu ende\n";
Test.say("fehler\n");
return 0;
}

lasse ich das programm laufen erhalte ich folgende ausgabe:

test erstellt
0xbfa25ffb test getoetet
noch ist es nicht zu ende
fehler
0xbfa25ffb test getoetet

änder ich die main folgendermaßen ab:


int main()
{
test Test = test();
delete &Test;
cout << "noch ist es nicht zu ende\n";
Test.say("fehler\n");
return 0;
}

sieht die ausgabe so aus:


test erstellt
0xbffde59b test getoetet
*** glibc detected *** free(): invalid pointer: 0xbffde59b ***

WARUM ??

wenn ich das richtig verstanden habe, gibt delete &Test doch den
speicherplatz von Test wieder frei, warum kommt es dann zu einer
Fehlermeldung, bevor "noch ist es nicht zu ende" angezeigt wird ??
und anderseits im ersten fall das object zwei mal zerstört bzw, warum
kann ich auf eine methode von Test zugreifen, obwohl es schon wieder
freigegeben wurde ??

greatz Johannes
--
Es gibt 10 Arten von Menschen auf dieser Welt, die einen verstehen das
Binärsystem und die anderen verstehen es nicht.

< Previous Next >