我正在练习C ++,并创建了一个类,用于存储从快速格式读取的序列及其名称。代码如下:
#include<fstream>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
class Sequence {
vector<string> fullSequence, sequenceNames;
public:
void fastaRead(string fileName);
string getSequence(int index);
};
string Sequence::getSequence(int index)
{
return fullSequence[index];
}
void Sequence::fastaRead(string fileName)
{
vector<string> fullSequence, sequenceNames;
ifstream inputFile;
inputFile.open(fileName);
if (inputFile.is_open()) {
string currentSeq;
string line;
bool newseq = false;
while (getline(inputFile, line))
{
if (line[0] == '>') {
sequenceNames.push_back(line.substr(1,line.size()));
newseq = true;
} else {
if (newseq == true) {
fullSequence.push_back(currentSeq);
currentSeq = line;
newseq = false;
} else {
currentSeq.append(line);
}
}
}
}
inputFile.close();
}
int main()
{
Sequence inseq;
cout << "Fasta Sequence Filepath" << endl;
string input;
getline(cin, input);
inseq.fastaRead(input);
inseq.getSequence(0);
return 0;
}
但是,当我使用以下虚拟输入文件运行程序时:
>FirstSeq
AAAAAAAAAAAAAA
BBBBBBBBBBBBBB
>SecondSeq
TTTTTTTTTTTTTT
>ThirdSequence
CCCCCCCCCCCCCC
>FourthSequence
GGGGGGGGGGGGGG
调用行inset.getSequence(0)
时出现分段错误。我做了什么导致了seg故障,我如何确保它不会发生?我知道它可能与指针中的错误有关,但我认为我没有使用指针,如果我没记错,需要*字符。
谢谢, 本。
答案 0 :(得分:2)
您需要删除void vector<string> fullSequence, sequenceNames;
函数中的Sequence::fastaRead
。当您在该函数中定义这些变量并使用它们时,您不会访问类中具有相同名称的变量,而是访问您在该函数中定义的局部变量,除非您在{{1}之前添加它们。访问时。
类中的变量实际上是空的,并且您会遇到分段错误。