Witam. Mam za zadanie stworzyć klasę, która wykorzystując operatory przeciążone, będzie reprezentowała zbiory i operacje na nich. Do dyspozycji mam tylko i wyłącznie tablice dynamiczne. Póki co mam problem z zwiększaniem rozmiaru tablicy, przy dodawaniu kolejnych elementów. W zasadzie sprawa wydawała mi się stosunkowo prosta: tworzę tymczasową tablicę(temp), kopiuję do niej elementy z tablicy reprezentującej zbiór(set), zwalniam pamieć zarezerwowaną przez set, alokuję nową, większą tablicę, po czym kopiuje do niej zawartość temp oraz nowe elementy. Na koniec zwalniam pamięć zajmowaną przez temp... i tu wlasnie pojawia się problem, którego na ten moment nie bardzo jestem w stanie pojąć. Oto mój kod:
//Sets.cpp
Sets::Sets(int s)
{
this->size = 1;
set = new int[size];
set[0] = s;
}
Sets::~Sets()
{
}
bool Sets::isElem(int elem)
{
for (int i = 0; i < size; i++)
{
if (elem = set[i])
return true;
}
return false;
}
void Sets::resize(int length)
{
int *temp = new int(size);
int new_size = length + size;
for (int i = 0; i < size; i++)
{
temp[i] = set[i];
}
delete[]set;
set = new int[new_size];
for (int i = 0; i < size; i++)
{
set[i] = temp[i];
}
size = new_size;
delete[]temp; //linijka powodujaca blad
}
//dodaje do zbioru wszystkie elementy tablicy
void Sets::addFromArray(int *array, int length)
{
resize(length);
for (int i = size - length, j = 0; i < size; i++, j++)
{
this->set[i] = array[j];
}
}
void Sets::show()
{
for (int i = 0; i < size; i++)
{
std::cout << set[i] << ",";
}
}
//dodaje do zbioru prawostronny operand
void Sets::operator+(int elem)
{
resize(1);
this->set[size - 1] = elem;
}
Przy próbie wywołania operatora delete dla tablicy temp wywala wyjątek "Heap Corruption detected". Bez tej linijki wszystko działa prawidłowo(pomijając wyciek pamięci). Nie bardzo rozumiem czemu tak się dzieje(serio szukałem i nie mogę doszukać się żadnego wyjechania poza zakres sterty, ale trochę juz późno więc może coś przeoczyłem..;) ) Dodam jeszcze, że błąd pojawia się dopiero przy drugim wywołaniu operatora + w funkcji Main:
//Main.cpp
#include"Sets.h"
int main()
{
Sets s(4);
s + 5; //to jeszcze działa prawidłowo
s + 6; // tu się wysypuje
s.show();
system("pause");
}
Jako, że to moje pierwsze kroki z C++, prosiłbym o wytłumaczenie czemu tak się dzieje, jak i o wytknięcie wszystkich innych błędów jakie tu mogłem popełnić. Z góry dzięki ;)