Heap corruption

0

Witam mam problem z wykryciem miejsca w który występuje uszkodzenie sterty.
Ma to być program sortujący ułamki zwykłe z użyciem merge sorta i struktur. Z góry dzięki za pomoc.

 #include <iostream>
using namespace std;

struct ulamki
{
	int licznik;
	int mianownik;
	double wynik;
};

void merge(ulamki *tablica,int start,int srodek,int koniec)
{
	ulamki *tab=new ulamki[(koniec-start)];
	int i=start, j=(srodek+1),k=0;

	while(i <=srodek && j<=koniec)
	{
		if(tablica[j].wynik<tablica[i].wynik)
		{
			tab[k]=tablica[j];
			j++;
		}
		else
		{
			tab[k]=tablica[i];
			i++;
		}
		k++;
	}
	if(i<=srodek)
	{
		while(i<=srodek)
		{
			tab[k]=tablica[i];
			i++;
			k++;
		}
	}
	else
	{
		while(j<=koniec)
		{
			tab[k]=tablica[j];
			j++;
			k++;
		}
	}
	for(i=0;i<=(koniec-start);i++)
	{
		tablica[start+i]=tab[i];
	}
	delete [] tab;
}

void merge_sort(ulamki *tablica,int start,int koniec)
{
	int srodek;

	if(start!=koniec)
	{
		srodek=((start+koniec)/2);
		merge_sort(tablica, start, srodek);
		merge_sort(tablica, srodek+1, koniec);
		merge(tablica, start, srodek, koniec);
	}
}

int main()
{
	int k;
	cin>>k;
	ulamki *tablica =new ulamki [k];
	for(int i=0;i<k;i++)
	{
		int licznik;
		int mianownik;
		char znak;

		cin>>licznik>>znak>>mianownik;

		tablica[i].licznik=licznik;
		tablica[i].mianownik=mianownik;
		tablica[i].wynik=((double)licznik/(double)mianownik);
	}

	merge_sort(tablica,0,k-1);

	for(int i=0;i<k;i++)
	{
		cout<<tablica[i].licznik<<"/"<<tablica[i].mianownik<<endl;
	}
	
	delete [] tablica;
	
	return 0;
}
0

Nie wiem, czy nie istnieje możliwość, że start>koniec.

Edit: okazuje się, że nie. Pomyliłeś się o jeden w deklaracji tab w funkcji merge.

0

dzieki wielkie:)

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