Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我会出现分割错误?瓦尔格林?_C++_Segmentation Fault_Valgrind - Fatal编程技术网

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 ^