0

我从我的编译器“分段错误:核心转储”收到此错误。我假设它来自我编写的函数,但不完全确定该函数有什么问题。

程序从输入文件中读取并在屏幕上输出结果(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++,所以如果您看到的任何错误很明显,请注意这一点。我在慢慢学习!

4

2 回答 2

3

我猜这是因为您忘记了return函数中的某些内容。因此,可能会发生段错误。另外,请确保您的警告级别很高,一个好的编译器通常会让您知道这一点。

这是 C++ 标准 6.6.3:

从函数的末尾流出相当于没有值的返回;这会导致值返回函数中的未定义行为。

于 2013-03-19T22:17:32.687 回答
0

如果你没有在函数中返回任何东西rna_complement,它应该是void. 分段错误来自std::string. 或者,您可以返回,line因为它是副本。如果您想就地修改字符串,可以传递对它的引用 ( string &line),它将修改传入参数的字符串。

于 2013-03-19T22:20:32.760 回答