문제

나는 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 결함을 일으키고 어떻게 발생하지 않도록하는지 어떻게해야합니까? 나는 그것이 포인터의 오류와 관련이있을 수 있다는 것을 알고 있지만, 내가 기억한다면 * 캐릭터가 필요하다면 포인터를 사용했다고 생각하지 않습니다.

감사합니다, 벤.

도움이 되었습니까?

해결책

제거해야합니다 vector<string> fullSequence, sequenceNames; 공허에서 Sequence::fastaRead 기능. 해당 함수 내부의 해당 변수를 정의하고 사용하면 이름이 같은 클래스의 변수에 액세스하지 않으면 해당 기능에서 정의한 로컬 변수에 액세스 할 수 있습니다. this-> 액세스하는 동안.

클래스의 변수는 실제로 비어 있고 세분화 오류가 발생합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top