使用输入文件流进行分段错误

时间:2013-03-19 22:13:19

标签: c++

我从编译器“分段错误:核心转储”中收到此错误。我认为它来自我写的函数,但不完全确定函数是错误的。

程序从输入文件中读取并在屏幕上输出结果(cout)。

string rna_complement(string line)
{

for(int i = 0; i < line.length(); i++)
{
        switch (line[i])
        {
            case 'A': line[i] = 'U'; break;
            case 'C': line[i] = 'G'; break;
            case 'G': line[i] = 'C'; break;
            case 'U': line[i] = 'A'; break;
            }
}


cout <<"Complement: " <<line <<endl;
}



int main()
{
string line1, line2, line3, line4, line5, line6;
ifstream genesacid;

genesacid.open("genes.txt");
    if(!genesacid.is_open())
    {
        cerr <<"Error: File cannot be opened"<<endl;
        return 0;
    }

            else
            {
                getline(genesacid, line1);
                getline(genesacid, line2);
                getline(genesacid, line3);
                getline(genesacid, line4);
                getline(genesacid, line5);
                getline(genesacid, line6);
            }



cout << "Fragment 1: " <<line1 <<endl;
rna_complement(line1);


cout << "Fragment 2: " <<line2 <<endl;

genesacid.close();


return 0;
}

我不擅长C ++,所以如果你看到的任何错误很明显,请注意这一点。我正在慢慢学习!

2 个答案:

答案 0 :(得分:3)

我猜这是因为你在功能上忘了return。因此可能发生seg故障。另外,请确保您的警告级别很高,一个好的编译器通常会让您知道这一点。

这是C ++标准6.6.3:

  

离开函数末尾相当于没有返回   值;这会导致值返回时出现未定义的行为   功能

答案 1 :(得分:0)

如果您未在函数rna_complement中返回任何内容,则应为void。 分段错误来自std::string的析构函数的调用。 或者,您可以返回line,因为它是副本。如果你想要对字符串进行就地修改,你可以传递对它的引用(string &line),它将修改参数中传递的字符串。