Почему рекурсивная функция приводит к EXC_BAD_ACCESS? - PullRequest
0 голосов
/ 14 апреля 2020

Появляется ошибка: Поток 1: EXC_BAD_ACCESS (код = 2, адрес = 0x7ffeef3fffe8) в строке if(time[i].second <= time[i+mid].first) и solve(i2, half, time); Эта функция основана на концепции двоичного поиска. Я пытался передать по ссылке, но это ничего не делает. Я не думаю, что моя рекурсивная функция приводит к ошибке «переполнение стека». В чем проблема?

#include<bits/stdc++.h>

     int solve(int i, int mid, vector<pair<int,int> > &time){
            if(time[i].second <= time[i+mid].first){
                if(time[i+mid-1].first >= time[i].second){
                    int i2 = mid;
                    int half = mid / 2;
                    solve(i2, half, time);
                }
                else{return i + mid;}
            }
            else{
                int half = mid/2;
                int i2 = i;
                solve(i2, half, time);
            }
            return i+mid;
        }

По сути, если я мой вектор состоит из этих пар: (1 3) (3 5) (2 4) (4 6) (5 7) Сначала ... мой вектор будет отсортирован на основе на концевых элементах переключаются вокруг (3, 5) и (2, 4); Затем, начиная с (1, 3), он попытается найти первый элемент с x в (x, y), который будет ближайшим к y в (1, 3) или 3, и вернет свою позицию, аналогично функции lower_bound.


Вот как я инициализирую свой вектор:

    //This is inside my int main() function
vector<pair<int,int> > time;
//I read n through cin before
while(n--){
     int s, e;
     cin >> s >> e;
     time.push_back(make_pair(s,e));
}
//sort based on end element(cmp function) already initalized
sort(time.begin(), time.end(), cmp);
for(int i = 0; i<time.size(); ++i){
            int mid = int((time.size()-i-1)/2);
            total += solve(i, mid, time);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...