C++ 为什么我会出现分割错误?瓦尔格林?
我编写了一个程序来确定两个字符串之间最长的公共子序列。我已经用一个小的硬编码测试用例测试了我的函数C++ 为什么我会出现分割错误?瓦尔格林?,c++,segmentation-fault,valgrind,C++,Segmentation Fault,Valgrind,我编写了一个程序来确定两个字符串之间最长的公共子序列。我已经用一个小的硬编码测试用例测试了我的函数LCSLength(),它返回了正确的值 现在,我从一个文件中读取字符串进行比较,我的程序给了我一个分段错误。代码如下: #include <iostream> #include <string> #include <vector> #include <fstream> using namespace std; int LCSLength(strin
LCSLength()
,它返回了正确的值
现在,我从一个文件中读取字符串进行比较,我的程序给了我一个分段错误。代码如下:
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
int LCSLength(string X,string Y);
int main()
{
ifstream inData("sequences.dat");
vector<string> lines(1);
string line;
int LCS;
while (getline(inData,line))
{
if (line.empty())
lines.push_back("");
else
lines.back() += line;
}
LCS = LCSLength(lines[0],lines[1]);
cout << "The LCS is: " << LCS << endl;
return 0;
}
int LCSLength(string X,string Y)
{
int m = X.size();
int n = Y.size();
int L[m+1][n+1];
for(int i=0; i<=m; i++)
{
for(int j=0; j<=n; j++)
{
if(i==0 || j==0)
L[i][j] = 0;
else if(X[i-1]==Y[j-1])
L[i][j] = L[i-1][j-1]+1;
else
L[i][j] = max(L[i-1][j],L[i][j-1]);
}
}
return L[m][n];
}
#包括
#包括
#包括
#包括
使用名称空间std;
int LCSLength(字符串X,字符串Y);
int main()
{
ifstream inData(“sequences.dat”);
矢量线(1);
弦线;
int LCS;
while(getline(inData,line))
{
if(line.empty())
行。将_向后推(“”);
其他的
lines.back()+=行;
}
LCS=LCSLength(行[0],行[1]);
cout您的行
向量始终包含一个元素,因此通过索引1访问它会导致UB
LCS = LCSLength(lines[0],lines[1]);
here ^
您确认退出while循环后,行[0]
和行[1]
都存在吗?只有在输入文件中至少有一行空行(并被识别为空行)时才会发生这种情况
根据Valgrind(务必读取其输出!)-您在main
(第11行或第23行)而不是LCSLength
中做了一些错误,我认为这是因为您无法做到这一点:int L[m+1][n+1];编译器在编译时不知道X和Y的大小,并且L数组无法正确初始化。请尝试使用值初始化
LCS = LCSLength(lines[0],lines[1]);
here ^