Witam. Od razu mówię, ze jestem początkujący jeśli chodzi o programowanie. Podczas pisania programu na zaliczenie, który ma wykonywać operacje na zbiorach napotkałem pewien problem. Program pisany w Visualu 2010, w MFC.
W obiekcie typu ZbiorNazw:
S - jest wskaźnikiem na tablicę stringów
n - liczbą elementów (tablicy)
Podczas wszystkie operacje na zbiorach są przeprowadzane w przeciążonych operatorach. Wywołanie operatora + w programie powoduje zawieszenie się programu bez błędów kompilacji. Z tego co sam zdołałem wywnioskować błąd powoduje linijka
tab[q]=s.S[j];
Po jej usunięciu zbiór sumy wyświetla się tylko w zbiorze znajdują się tylko elementy pierwszego
Program zatrzymuje się na pliku mlock.c w funkcji:
void __cdecl _unlock (
int locknum
)
{
/*
* leave the critical section.
*/
LeaveCriticalSection( _locktable[locknum].lock );
}
Poniżej cały algorytm dodawania zbioru.
ZbiorNazw& ZbiorNazw::operator + (const ZbiorNazw& s) const
{
ZbiorNazw *x = new ZbiorNazw("suma"); //stworzenie nowego obiektu (zbioru liczbowego) na sumę
int ilosc=s.n + n;
string *tab=new string[ilosc]; //utworzenie dodatkowej tablicy na elementy pierwszego zbioru,
//niepowtarzające się w drugim
int q=0;
int p=0;
int j, i, z=0; //zmienne tymczasowe, używane w pętlach
for (i=0; i<ilosc; i++)
tab[i]="cos";
for (i=0; i<n; i++)
{
for(j=0; j<s.n; j++)
{
if(S[i]==s.S[j])
{
ilosc--; //pętla licząca ilość elementów niepowtarzających się w obu zbiorach
}
}
}
for (j=0; j<s.n; j++)
{
p=0;
for(i=0; i<n; i++)
{
if(S[i]==s.S[j])
{
p++;
}
}
if (p==0) //pętla zapisująca do tymczasowej tablicy elementy drugiego zbioru,
//niepowtarzające się w pierwszym
{
tab[q]=s.S[j];
q++;
}
}
x->n=ilosc;
x->S = new string[ilosc]; //utworzenie tablicy na sumę
for (i=0; i<n; i++)
x->S[i]=S[i]; //wpisanie do tymczasowej tablicy wszystkich elementów pierwszego zbioru
for (i=n, q=0; i<ilosc; i++, q++)
x->S[i]=tab[q]; //wpisanie do tymczasowej tablicy tych elementów tablicy tymczasowej
delete []tab; //usunięcie tymczasowej tablicy z pamięci
return *x;
}
Proszę o jakieś wskazówki w rozwiązaniu problemu. Forma programu jest narzucona z góry, więc nie mogę stosować innych rozwiązań.