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

I am passing a vector to a function. Program is compiling but when I am running it, it is showing segmentation fault(core dump).

我想使用合并排序对文本文件进行排序。我正在使用矢量来处理文本文件。该程序编译正确,但是当我 运行 它时,它显示分段错误(核心转储)错误。我尝试了很多东西,但都是徒劳的。谁能帮我解决这个问题。提前致谢。

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

你不能像数组一样只创建一个向量并赋值。您需要先调用 vector::push_back() 以增加大小。

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