Итак, у меня есть функция, которая читает строки из файла и помещает их в вектор строк, называемый словами. У меня есть функция Quicksort, которая, по сути, сортирует весь вектор, но когда я вызываю функцию Quicksort, она выдает мне эту ошибку «Thread 1: EXC_BAD_ACCESS (code = 2, address = 0x7ffeef3ffff8)», и в Виртуальной коробке я использую Debian 9, он дает мне ошибку сегментации.
int main()
{
int time[5];
vector<string> words;
words=ReadFromFile();
auto start = std::chrono::system_clock::now();
quicksort(words, 0, words.size()-1);
auto end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end-start;
cout<<endl;
time[2]=elapsed_seconds.count();
cout<<" Elapsed time: " << elapsed_seconds.count() <<"\n ";
cout<<endl;
}
Я хочу получить время, необходимое для сортировки всех слов функцией.
void quicksort(vector<string> words, long int from, long int to) //goes into infinite loop
{
if (from > to)
{
return;
}
long int p = partition(words, from, to);
quicksort(words, from, p);
quicksort(words, p + 1, to);
}
long int partition(vector<string> words, long int from, long int to)
{
string pivot = words[from];
long int i = from - 1;
long int j = to + 1;
while (i < j)
{
i++;while (words[i] > pivot){i++;}
j--;while (words[j] < pivot){j--;}
if (i < j){std::swap(words[i],words[j]);}
}
return j;
}
Моя функция чтения из файла выглядит так:
vector<string> ReadFromFile(){
vector<string> words;
ifstream read;
read.open("macbeth.txt");
if(!read.is_open())
{
cout<<"Error Opening file"<<endl;
}
else
{
while(!read.eof())
{
string line;
getline(read,line);
stringstream Curstr(line);
while(Curstr>>line)
{
words.push_back(line);
}
}
read.close();
}
return words;
}
Итак, я получаю EXE_bad_access, и рекурсия будет выполняться около 50000 раз.
@ EDIT Использование отладчик, я обнаружил, что pivot
не получает значение от words[from]
. Это показывает, что string pivot = ""
вместо этого должно иметь значение, подобное string pivot = words[from] //MACBETH
, которое является значением words[from]
, где from = 0
, когда функция вызывается в первый раз. Теперь, как мне получить значение в сводную, чтобы он мог разделить вектор и выполнить сортировку.