2016-09-12 5 views
-2

병합 정렬을 사용하여 텍스트 파일을 정렬하려고합니다. 텍스트 파일을 처리하기 위해 벡터를 사용하고 있습니다. 이 프로그램은 올바르게 컴파일되고 있지만 실행 중일 때는 세그먼트 화 오류 (코어 덤프) 오류가 표시됩니다. 나는 헛되이 많은 것을 시도했다. 누구든지이 일에서 나를 도울 수 있습니까? 미리 감사드립니다.벡터에 함수를 전달하고 있습니다. 프로그램은 컴파일 중입니다.하지만 실행 중일 때 세그먼트 팅 오류 (코어 덤프)가 표시됩니다.

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; 
} 
+5

당신이 디버거에서 프로그램을 통해 밟은 사용하여 멤버에 액세스 할 수 이루어집니다? segfault가 정확히 어디에서 발생합니까? – Angew

+0

로컬 벡터'sV1'과'sV2'는 비어 있습니다. 처음에 요소를 추가 할 때까지 색인을 생성 할 수 없습니다. –

+0

프로그램을 단계별 실행하는 데 시간이 너무 오래 걸리는 경우 코어 덤프를 가져오고 ("ulimit -c unlimited"를 설정하고 프로그램을 다시 실행해야 할 수도 있음) 디버거에 피드를 제공해야합니다 (gdb에서는 "gdb path/to/the/바이너리 경로/to/the/dump ") 호출 스택을 확인하십시오 (gdb에서는"bt "입니다). –

답변

1

벡터를 만들고 배열과 마찬가지로 값을 할당 할 수 없습니다. vector :: push_back()을 먼저 호출하여 크기를 늘려야합니다. 한번

는 첨자는 []

+1

if [index] where index Ceros

+0

감사합니다 @Dkg .. :) –