我正在尝试使用向量实现来解决挑战性问题。但是,当我尝试将字符串存储在vector中时,却以某种方式遇到分段错误。

此特定行引起问题lar.push_back(l)

#include<iostream>
#include<stdio.h>

#include<string.h>
#include<algorithm>
#include<vector>
using namespace std;

int main()
{  int t;
cin>>t;
while(t--)
{
    vector <string> temp;
    int n;

    cin>>n;
    int arr[n];
    for(int i=0;i<n;i++)
    cin>>arr[i];
  vector  <string> ar ;
//{"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
ar.push_back("abc");
ar.push_back("def");
ar.push_back("ghi");
ar.push_back("jkl");
ar.push_back("mno");
ar.push_back("pqrs");
ar.push_back("tuv");
ar.push_back("wxyz");


   vector <string> lar;

int p=1;
while(p<=n)
{

  if(p==1)
  {
    for(int i=0;i<ar[arr[n-2]-2].length();i++)
    {
        for(int j=0;j<ar[arr[n-1]-2].length();j++)
        {
            char s=ar[arr[n-2]-2][i];
            char h=ar[arr[n-1]-2][j];
            string l;
            l.push_back(s);
            l.push_back(h);
            lar.push_back(l);

        }

    }
    n=n-1;
}
else
    {
     for(int i=0;i<ar[arr[n-2]-2].length();i++)
         {
            for( int j=0;lar.size();j++)
            {
             char s=ar[arr[n-2]-2][i];
             string t;
             t.push_back(s);
             string z=s+lar[j];
             //t.push_back("aaa");
             temp.push_back(z);
            // temp.push_back(lar[j]);

            }
         }
        lar=temp;
    }


p++;
}

for(int i=0;lar.size();i++)
  cout<<lar[i]<<" ";



}

    return 0;
}


当我输入为

1
2
2 3


输出为:aa ab ac ba bb bc ca cb cc(有分段错误)

但是当我输入为

1
3
2 3 4


没有给出输出,并且发生分段错误。

最佳答案

代码的最后部分有一个错误:

for(int i=0;lar.size();i++)


应该:

for(int i=0;i<lar.size();i++)


否则,循环未终止,因此到达未填充的lar区域,因此读取无效,结果出现了段错误。

我也正在寻找另一个问题。

我在else {}部分中发现了第二个问题,您得到了:

string z=s+lar[j];


但是j来自上一个循环。这条线也崩溃了。

我不得不说,即使将代码更改为:

string z=s+lar[i];


我怀疑该算法存在设计缺陷。不过,它仍然比Lennart Poettering投入linux的代码更好。

10-08 17:21