Я хочу сортировать текстовый файл, используя сортировку слияния. Я использую вектор для обработки текстового файла. Эта программа компилируется правильно, но когда я ее запускаю, она показывает ошибку сегментации (сбрасывание ядра). Я много пробовал, но все напрасно. Может ли кто-нибудь помочь мне в этом. Заранее спасибо.Я передаю вектор функции. Программа компилируется, но когда я ее запускаю, она показывает ошибку сегментации (основной дамп).
vector<string> sV;
void merge(vector<string> & sV, int l, int m, int r)
{
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
vector<string> sV1;
vector<string> sV2;
for (i = 0; i < n1; i++)
sV1[i] = sV[l+1];
for (j = 0; j < n2; j++)
sV2[j] = sV[m + 1 + j];
i = 0;
j = 0;
k = l;
while (i < n1 && j < n2)
{
if (sV1[i] <= sV2[j])
{
sV[k] = sV1[i];
i++;
}
else
{
sV[k] = sV2[j];
j++;
}
k++;
}
while (i < n1)
{
sV[k] = sV1[i];
i++;
k++;
}
while (j < n2)
{
sV[k] = sV2[j];
j++;
k++;
}
}
void mergeSort(vector<string> & sV, int l, int r)
{
if (l < r)
{
int m = l+(r-l)/2;
mergeSort(sV, l, m);
mergeSort(sV, m+1, r);
merge(sV, l, m, r);
}
}
int main()
{
string word;
char ch, ch1;
ifstream tin("a1.txt");
ofstream outp("out.txt");
if(!tin.is_open())
cout << "Unable to open file :) \n";
while(tin >> word)
sV.push_back(word);
mergeSort(sV, 0, sV.size() - 1);
for (size_t i = 0; i < sV.size(); i++) {
outp<< sV[i] << " ";
}
return 0;
}
активизировали вас через вашу программу в отладчике? Где именно происходит segfault? – Angew
Локальные векторы 'sV1' и' sV2' пусты. Вы не можете индексировать их до тех пор, пока не добавите некоторые элементы. –
Если переход через программу занимает слишком много времени, получите дамп ядра (вам может потребоваться установить «ulimit -c unlimited» и перезапустить программу), подать его в отладчик (в gdb, это «путь gdb/to/the/binary path/to/the/dump ") и проверьте стек вызовов (в gdb, это« bt »). –