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 に答える