cyberschaf
Grünschnabel
Hallo zusammen, ich sitze inzwischen seit 3 Stunden an meinem Problem und weiß nicht mehr weiter. Habe alles mögliche ausprobiert, komme aber nicht voran.
Deshalb hoffe ich, dass mir jemand helfen kann.
Der Code ist folgender:
Das wirft einen Fehler, genauso wie andere Zugriffe. Allerdings wird der Konstruktor aufgerufen und der Parameter "Affe" übergeben und gib_name() funktioniert auch. Wieso auch immer...
Habe bereits mit totalview und valgrind versucht selber was herauszufinden, es entzieht sich aber komplett meiner Kenntnis, was da abläuft.
Hier die Klassen noch:
kraftwerk.cpp
kraftwerk.h
Die Klassenbeschreibungen usw. bitte ignorieren, die brauche ich nur zum Fehler abfangen, sind aber prinzipiell nur kopiert und sollten so funktionieren. "Objekt" ist die Standardklasse, von der hier alles abgeleitet wird. Funktioniert normalerweise auch super, allerdings in diesem Fall nicht.
Valgrind sagt mir folgende Fehlermeldung (vielleicht hilft die ja):
Vielen Dank jedenfalls schon mal für die Hilfe!
Deshalb hoffe ich, dass mir jemand helfen kann.
Der Code ist folgender:
Code:
Kraftwerk *test;
test = new Kraftwerk("Affe");
cout << test->gib_test();
Das wirft einen Fehler, genauso wie andere Zugriffe. Allerdings wird der Konstruktor aufgerufen und der Parameter "Affe" übergeben und gib_name() funktioniert auch. Wieso auch immer...
Habe bereits mit totalview und valgrind versucht selber was herauszufinden, es entzieht sich aber komplett meiner Kenntnis, was da abläuft.
Hier die Klassen noch:
kraftwerk.cpp
Code:
#include "kraftwerk.h"
Kraftwerk::Kraftwerk(const string & name):Objekt()
{
this->KWname=name;
cout << name;
}
static CKlasse Kraftwerk_Beschr("Kraftwerk",KRAFTWERK);
CKlassenBeschr KRAFTWERK = &Kraftwerk_Beschr;
const CKlassenBeschr& Kraftwerk::klassen_beschr() const
{
return KRAFTWERK;
}
bool Kraftwerk::ist_ein(CKlassenBeschr beschr) const
{
return (beschr == KRAFTWERK||Objekt::ist_ein(beschr));
}
void Kraftwerk::print(ostream &stream) const
{
}
Kraftwerk::~Kraftwerk()
{
}
kraftwerk.h
Code:
#ifndef KRAFTWERK_H_
#define KRAFTWERK_H_
#include "allg.h"
#include "cobjekt.h"
class Kraftwerk:public Objekt
{
private:
string KWname;
public:
Kraftwerk(const string & name);
virtual const CKlassenBeschr& klassen_beschr() const;
virtual bool ist_ein(CKlassenBeschr beschr) const;
virtual void print(ostream &stream = cout) const;
virtual string gib_name() { return KWname; };
virtual string gib_test() { return KWname; };
virtual ~Kraftwerk();
};
extern CKlassenBeschr KRAFTWERK;
#endif /*KRAFTWERK_H_*/
Die Klassenbeschreibungen usw. bitte ignorieren, die brauche ich nur zum Fehler abfangen, sind aber prinzipiell nur kopiert und sollten so funktionieren. "Objekt" ist die Standardklasse, von der hier alles abgeleitet wird. Funktioniert normalerweise auch super, allerdings in diesem Fall nicht.
Valgrind sagt mir folgende Fehlermeldung (vielleicht hilft die ja):
Code:
==31619== Jump to the invalid address stated on the next line
==31619== at 0x4D433131: ?
==31619== by 0x805DB4F: main (main.cpp:76)
==31619== Address 0x4d433131 is not stack'd, malloc'd or (recently) free'd
==31619==
==31619== Process terminating with default action of signal 11 (SIGSEGV)
==31619== Access not within mapped region at address 0x4D433131
==31619== at 0x4D433131: ?
==31619== by 0x805DB4F: main (main.cpp:76) [Anmerkung: main.cpp:76 ruft die Klasse auf, in der das erste Codeschnippsel steht]
==31619== If you believe this happened as a result of a stack overflow in your
==31619== program's main thread (unlikely but possible), you can try to increase
==31619== the size of the main thread stack using the --main-stacksize= flag.
==31619== The main thread stack size used in this run was 8388608.
Affe==31619==
==31619== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 5 from 1)
==31619== malloc/free: in use at exit: 16,757 bytes in 316 blocks.
==31619== malloc/free: 863 allocs, 547 frees, 77,560 bytes allocated.
==31619== For counts of detected errors, rerun with: -v
==31619== searching for pointers to 316 not-freed blocks.
==31619== checked 44,282,812 bytes.
==31619==
==31619== LEAK SUMMARY:
==31619== definitely lost: 0 bytes in 0 blocks.
==31619== possibly lost: 8,057 bytes in 204 blocks.
==31619== still reachable: 8,700 bytes in 112 blocks.
==31619== suppressed: 0 bytes in 0 blocks.
==31619== Rerun with --leak-check=full to see details of leaked memory.
Speicherzugriffsfehler
Vielen Dank jedenfalls schon mal für die Hilfe!
