Segmentation Fehler Erwartung aber doppelt frei oder Korruption (fasttop) bekommen: 0x0000000000cf4c20 ***Doppel frei Fehler statt Segmentation Fehler
PFB Code
#include<iostream>
using namespace std;
class test
{
public:
int size;
int *elem;
test(int x):size(x),elem(new int[x])
{
cout<<"default constructor"<<endl;
}
test(const test & x)
{
cout<<"copy constructor and shallow copying";
this->size=x.size;
this->elem=x.elem;
}
~test()
{
delete [] elem;
}
void display()
{
for (int i=0;i<size;i++)
{
cout<<*(elem+i)<<endl;
}
}
};
int main()
{
test t(3);
t.elem[0]=12;
t.elem[1]=24;
t.elem[2]=33;
{
test f(t);
f.display();
t.display();
}
t.display();
}
Ich versuche, flach Kopieren zu verstehen, und war Segmentierungsfehler erwartet.
In Ihrem Kopierkonstruktor ordnen Sie elem vom Quellobjekt dem Zielobjekt zu. Wenn der Gültigkeitsbereich von test f() endet, ruft er das delete [] auf seinem Element auf, das auf das Element von t zeigt. Wenn main den Geltungsbereich verlässt, ruft t delete [] auf elem auf, aber dies wurde bereits freigegeben, wenn f den Gültigkeitsbereich verlassen hat. – user3336523
Es sollte den Fehler vor dem Löschen des Speichers geworfen haben, wenn t Anrufe am Ende zeigt – unixlover
Das ist nicht garantiert wie in der Antwort unten erwähnt. Obwohl Sie den Speicher löschen, ändern Sie den Elem-Zeiger in t nicht, um NULL zu sein, der immer noch auf die gleiche Stelle im Heap zeigt, und obwohl dieser Speicher nicht mehr zugeordnet ist, können Sie immer noch darauf zugreifen. – user3336523