C++ 利用输入文件流进行故障分割

C++ 利用输入文件流进行故障分割,c++,C++,我从我的编译器“分段错误:核心转储”收到此错误。我假设它来自于我编写的函数,但不确定该函数有什么错误 程序读取输入文件,并在屏幕上输出结果(cout) 字符串rna_补码(字符串行) { 对于(int i=0;i 从函数末尾流出相当于返回,而不返回 值;这会导致返回值时出现未定义的行为 功能 我猜这是因为您忘记了在函数中返回某个内容。seg错误可能因此而发生。此外,请确保您的警告级别处于高级别,一个好的编译器通常会让您知道这一点 这里是C++标准的63.3:< /P> 从函数末尾流出相当于返回,

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

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

字符串rna_补码(字符串行)
{
对于(int i=0;icout我猜这是因为您忘记了在函数中返回某个内容。因此可能会发生seg错误。此外,请确保您的警告级别处于高级别,一个好的编译器通常会让您知道这一点

这里是C++标准的63.3:< /P> 从函数末尾流出相当于返回,而不返回 值;这会导致返回值时出现未定义的行为 功能


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

这里是C++标准的63.3:< /P> 从函数末尾流出相当于返回,而不返回 值;这会导致返回值时出现未定义的行为 功能


如果在函数
rna\u complete
中没有返回任何内容,则它应该是
void
。 分段错误来自
std::string
的析构函数调用。
或者,您可以返回
,因为它是一个副本。如果您想就地修改字符串,您可以传递对它的引用(
string&line
),它将修改传入参数的字符串。

如果在函数
rna\u complement
中没有返回任何内容,它应该是
void
。 分段错误来自
std::string
的析构函数调用。

或者,您可以返回
,因为它是一个副本。如果您想就地修改字符串,您可以传递对它的引用(
string&line
),它将修改传入参数的字符串。

您能一步一步地调试以定位错误发生的位置吗?分段错误发生在哪里?(在哪一行?)您可以从修复不一致的缩进开始,这样我们可以更好地理解代码。分段错误的报告不是来自编译器,而是来自运行时/操作系统。您可以而且应该使用调试器运行它,这通常会自动指示源中触发错误的位置。它没有说明发生了哪一行但是当我运行程序时,它会输出“片段1”,然后运行函数(输出一行),然后显示错误。你能一步一步地调试错误发生的位置吗?分段错误发生在哪里?(在哪行?)您可以从修复不一致的缩进开始,这样我们可以更好地理解代码。分段错误的报告不是来自编译器,而是来自运行时/操作系统。您可以而且应该使用调试器运行它,这通常会自动指示源中触发错误的位置。它没有说明发生了哪一行但是当我运行程序时,它会输出“片段1”,然后运行函数(输出一行)然后,它显示了错误。为了清楚,忘记这样做是不明确的行为,等同于<代码>返回;。谢谢,我从标准中添加了引用。坦率地说,标准在这种情况下是不足的。理想的是,应该修改以澄清这种函数的结尾会导致畸形的C++程序。是的,这是一个硬错误。但这不会发生,所以我同意至少发出一个警告。@NikBougalis,是的,我确实时常忘记做这件事。谢天谢地,我所知道的所有主要编译器都有关于这一点的说法。MSVC给出了一个错误(据我所知,这是非标准的,但程序无论如何都会被破坏)GCC和Clang至少以正确的警告级别发出警告。我非常感谢它这么容易发现错误。为了清楚起见,忘记这样做是未定义的行为,相当于
返回;
@chris:谢谢,我添加了标准中的引用。坦白说,在这种情况下,标准是有缺陷的。理想情况下,应该将其修改为c从这个函数的结尾流出来的结果会导致一个畸形的C++程序和一个硬错误。但是这不会发生,所以我会至少要提出一个警告。@ NikBougalis,是的,我确实时常忘记这么做。谢天谢地,我知道的所有主要编译器都有一些要说的。MSVC给出了一个错误。(据我所知,这是非标准的,但无论如何程序都会被破坏)GCC和Clang至少会以正确的警告级别发出警告。我非常感谢它这么容易捕获错误。奇怪的是,我从未使用过在这种情况下不发出“警告:控件已到达非无效函数的结尾”或类似警告的编译器。
Clang
默认情况下会在没有任何标志的情况下进行投诉。
GCC
没有任何标志的情况下不会成功“不要抱怨。
gcc-Wall
会。奇怪的是,
gcc-pedantic
似乎也不在乎。奇怪的是,我从未使用过在这种情况下没有给出“警告:控件到达非无效函数结尾”或类似警告的编译器。
clang
默认情况下会抱怨,没有任何标志。
gcc
没有任何标志不会抱怨。
gcc-Wall
会的。奇怪的是,
gcc-pedantic
似乎也不在乎。
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;
}