błąd w dostępie do pamięci - quicksort C++

0

Witam, tworzę kod sprawdzający czas działania poszczególnych sortowań w zależności od rozmiaru sortowanej tablicy, wszystkie które potrzebuję działają, poza quicksortem, z kluczem jako medianą z 3 elementów, z którym użeram się już parę godzin. Siedzę na VS2012.
Wrzucam tylko kod quicksorta na podstawie danego mi pseudokodu.

int mediana(int A, int B, int C) //te "ory" wydają mi się niepotrzebne, ale też chyba w niczym nie przeszkadzają
{                                   //a właśnie w tym miejscu program kończy swą działalność z komunikatem błędu
	if ((B > C && B < A) || (B < C && B > A))                                            //w dostępie do pamięci
		return B;
	else if ((C > A && C < B) || (C < A && C > B))
		return C;
	else
		return A;
}

int quick1(int *tab, int d, int g)
{
	int s, t, i, tmp;
	if (d < g)
	{
		t = mediana(*(tab+d), *(tab+(g/2)), *(tab+g));
		s = d;
		for (i = d + 1; i <= g; i++)
		{
			if (*(tab + i) < t)
			{
				s = s + 1;
				tmp = *(tab + s);
				*(tab + s) = *(tab + i);
				*(tab + i) = tmp;
			}
		}
		tmp = *(tab + d);
		*(tab + d) = *(tab + s);
		*(tab + s) = tmp;
		quick1(tab, d, s - 1);
		quick1(tab, s + 1, g);
	}
	return 0;
}

Ciekawi mnie gdzie popełniłem błąd. Any ideas?
Pozdrawiam

1

Valgrind w dloń

4

Pierwszy błąd to nazwanie zmiennych literkami d, g, s, t.
Drugi "błąd" to używanie składni *(tab + i) zamiast tab[i].
Trzeci błąd to niepodanie kodu wywołującego, przez co nie wiadomo czy przypadkiem *(tab + g) nie jest wyjściem poza zakres tablicy.

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