병합 정렬을 사용하여 텍스트 파일을 정렬하려고합니다. 텍스트 파일을 처리하기 위해 벡터를 사용하고 있습니다. 이 프로그램은 올바르게 컴파일되고 있지만 실행 중일 때는 세그먼트 화 오류 (코어 덤프) 오류가 표시됩니다. 나는 헛되이 많은 것을 시도했다. 누구든지이 일에서 나를 도울 수 있습니까? 미리 감사드립니다.벡터에 함수를 전달하고 있습니다. 프로그램은 컴파일 중입니다.하지만 실행 중일 때 세그먼트 팅 오류 (코어 덤프)가 표시됩니다.
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 path/to/the/바이너리 경로/to/the/dump ") 호출 스택을 확인하십시오 (gdb에서는"bt "입니다). –