Хочу сделать визуализацию сортировки слиянием на SFML. Уже сделал визуализацию быстрой сортировки, там всё работает отлично, причем вроде действия те же. У меня есть массив из структур, структура выглядит так:
struct elem2
{
sf::RectangleShape shape;
int value;
};
Вот основная функция сортировки:
void merge_sort (elem2 a[], int p, int r)
{
if (p < r)
{
int q = (p + r)/2;
merge_sort(a, p, q);
merge_sort(a, q + 1, r);
merge(a, p, q, r);
}
}
вроде ничего необычного, рекурсия используется и в быстрой сортировке, там всё работает. В самом начале вспомогательной функции, при первом же её вызове всё вылетает с ошибкой EXC_BAD_ACCESS (code=1, address=0x0), что, вроде как, обычно говорит, что я вышел за границы массива. Вылетает вот здесь:
int merge (elem2* a, int p, int q, int r)
{
elem2* pq = (elem2*)malloc(sizeof(elem2) * ((q - p) + 1));
elem2* qr = (elem2*)malloc(sizeof(elem2) * (r - q));
sf::Vector2f pos;
int j = p;
for (int i = 0; i < q - p + 1; i++)
{
pq[i] = a[j];
j++;
}
j = q + 1;
for (int i = 0; i < r - q; i++)
{
qr[i] = a[j];
j++;
}
...
При первом вызове выделяется место под два массива длиной в один элемент, я проверил через отладчик, с индексами точно всё в порядке, ничего за границы не выходит. При этом вылетает то в первом цикле, то во втором, чаще в первом. Хотя по сути ничего странного вроде как нет – просто копируем содержимое из данного массива в только что созданный. Далее я попробовал изменить структуру на вот такую:
struct elem2
{
int shape;
int value;
};
Всё заработало. При этом проблема именно с фигурами, то есть, допустим, sf::CircleShape тоже не работает, а вот если туда вписать sf::Vector2f, то всё запускается. В чём может быть проблема?