我将向量传递给函数。程序正在编译,但是当我运行它时,它显示了分段错误(核心转储)。

时间:2016-09-12 13:45:39

标签: c++ segmentation-fault stdvector coredump

我想使用合并排序对文本文件进行排序。我正在使用vector来处理文本文件。这个程序正在正确编译,但是当我运行它时,它显示了分段错误(核心转储)错误。我尝试过很多东西,但都是徒劳的。任何人都可以帮助我。提前谢谢。

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

1 个答案:

答案 0 :(得分:1)

你不能只创建一个矢量并像数组一样分配一个值。你需要先调用vector :: push_back()来增加大小。

完成后,您可以使用下标[]

访问该成员