Hallo Leute,
Ich habe jetzt nach ca einer Woche Suchen aufgegeben. Manchmal ist der Teufel ja ein Eichhörnchen, daher wende ich mich jetzt einfach mal an euch
.
Ich habe eine Klasse, in der ich im Konstruktor Speicher auf dem Heap anfordere. Diesen wiederum gebe ich natürlich im Destruktor frei. Das funktioniert auch soweit für einzelne Objekte ganz gut. Wenn ich nun allerdings eine std::list mit Kopien dieser Objekte anlege, und das Programm beende, bekomme ich folgende Fehlermeldung:
Access violation reading location 0xcdcdcdc1.
Es ist auch immer die selbe Adresse. Kommentiere ich nun allerdings das delete[] im Destruktor aus, so läuft das Programm einwandfrei. Ich hab echt keine Ahnung wo mein Fehler liegen könnte. Daher hier mal ein bisschen Code:
Das ist natürlich seeehr stark vereinfacht, aber ich hab soweit alles was mit dem Zeiger zu tun hat auskommentiert, sodass dies wirklich die einzigen beiden Aufrufe im Kon- und Destruktor sind. Vielleicht gibt es ja noch etwas beim zerstören von Objekten in Listen zu beachten?
Und der Fehler tritt erst beim beenden, sprich - dem Zerstören der Kopien in der std::list- auf.
Ich hoffe hier kann mir jemand Licht in Dunkel bringen,
Ein schönes Wochenende!
Ich habe jetzt nach ca einer Woche Suchen aufgegeben. Manchmal ist der Teufel ja ein Eichhörnchen, daher wende ich mich jetzt einfach mal an euch

Ich habe eine Klasse, in der ich im Konstruktor Speicher auf dem Heap anfordere. Diesen wiederum gebe ich natürlich im Destruktor frei. Das funktioniert auch soweit für einzelne Objekte ganz gut. Wenn ich nun allerdings eine std::list mit Kopien dieser Objekte anlege, und das Programm beende, bekomme ich folgende Fehlermeldung:
Access violation reading location 0xcdcdcdc1.
Es ist auch immer die selbe Adresse. Kommentiere ich nun allerdings das delete[] im Destruktor aus, so läuft das Programm einwandfrei. Ich hab echt keine Ahnung wo mein Fehler liegen könnte. Daher hier mal ein bisschen Code:
C++:
//class.h
class CLASS
{
//..
int* Arr;
//....
public:
CLASS();
CLASS(const CLASS&);
~CLASS();
//...
};
//class.cpp
CLASS::CLASS()
{
Arr=new int[/*Größe wird durch Konstruktorübergabeparameter bestimmt*/];
}
CLASS::CLASS(const CLASS& classA)
{
delete[] Arr;
Arr=new int[sizeof(classA.Arr)];
for(int i=0;i<sizeof(classA.Arr);i++)
Arr[i]=classA.Arr[i];
}
CLASS::~CLASS()
{
delete[] Arr;
}
//main.cpp
std::list<CLASS> ClassList;
CLASS classObject;
// Zuweisungen an CLASS Objekt
ClassList.push_back(classObject);
//...
Das ist natürlich seeehr stark vereinfacht, aber ich hab soweit alles was mit dem Zeiger zu tun hat auskommentiert, sodass dies wirklich die einzigen beiden Aufrufe im Kon- und Destruktor sind. Vielleicht gibt es ja noch etwas beim zerstören von Objekten in Listen zu beachten?
Und der Fehler tritt erst beim beenden, sprich - dem Zerstören der Kopien in der std::list- auf.
Ich hoffe hier kann mir jemand Licht in Dunkel bringen,
Ein schönes Wochenende!
Zuletzt bearbeitet von einem Moderator: