W jaki sposób poprawić ten kod ?

0

Witam !

Mam taki kod:

#include <iostream>
#include <new>

class Klasa
{

public:
Klasa();
~Klasa();

};


Klasa::Klasa()
{
cout << "Konstruktor" << endl;
}

Klasa::~Klasa()
{
cout << "Desktruktor" <<endl;
}


int main()
{
Klasa *wsk=static_cast<Klasa*> (operator new(sizeof(Klasa)*5));
for (int i=0;i<5;++i) new (wsk+i) Klasa();
for (int i=0;i<5;++i) delete (wsk+i);
}

Dlaczego podczas wykonywania tego programu przy trzecim wywołaniu destruktora dostaję: "Segmentation fault" ?

Używam kompilatora: gcc version 2.95.4 20011002 (Debian prerelease)

Ale np. pod Dev-C++ 4.9.7.0 wszystko pięknie działa!

PS. Nie pytajcie o sens tego kodu :)

0

Pomyłka w arytmetyce na wskaźnikach:
for (int i=0;i<5;++i) new (wsk+i) Klasa();
for (int i=0;i<5;++i) delete (wsk+i);
Po przebiegu pierwszej pętli for przydzielasz pamiec od wsk do wsk+4;
a w drugiej pętli deletujesz od wsk+5 do wsk + 9.
Uważaj bo w ten sposób możesz nawobić sobie dużo zamieszania w kompie jeżli skasujesz fragment jakiegoś ważnego kodu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1