程序接收了信号sigsegv,在代码块中调试时的细分故障



我是C 的初学者,我试图解决https://projecteuler.net/problem = 9。我为此写了一个代码,它显示了错误 - 程序接收信号sigsegv,分段故障。在strcmp(((c: windows syswow64 msvcrt.dll(中 在调试时。

如果我直接运行程序,则出现一个对话框,上面写着" Windows正在检查解决方案。"

我尝试不使用字符串函数,而不是写pytha(a,b,c(==" true",我只是写了axa bxb = c * c(我写 *而不是x,但这里没有在两个A之间显示 *,因此我将其替换为X(,并且代码效果很好。但是问题是为什么它不适用于字符串函数?

我看不到代码任何问题。

我发现了很多类似的问题 - 1. https://www.codeproject.com/questions/93770/what-is-this-this-means-program-regram-signal-signal-sigsegv
根据此,我的程序是指它无法访问的内存位置。但是我看不到任何限制此代码以访问某些东西的东西。

  1. 程序收到的信号sigsegv,分割故障错误

3.debug ---程序接收信号sigsegv,分段故障

  1. 程序收到信号sigsegv,分割故障

  2. '程序接收到信号sigsegv,分段故障。'

  3. 程序收到信号sigsegv,分割故障

  4. 程序接收信号sigsegv,分段故障,链接列表程序

他们都没有回答我的查询,因为我无法将其与我的代码中提到的代码联系起来。链接编号5个提及可能是由于涉及大量计算而可能是错误的。即使我对我的代码也有疑问,但是当我不使用" pytha"函数时,它可以正常工作。另外,我看不到与与内存访问有关的错误相关的大量步骤。

此外,即使涉及大量步骤是原因,该程序也应在给出足够的时间时进行编译。但事实并非如此。直接显示了" Windows正在寻找解决方案"的错误。

#include <cmath>
#include <iostream>
#include <string>
using namespace std;
string pytha(int a, int b, int c) {
    if(a * a + b * b == c * c) return "true";
}
int main() {
    for(int a = 1; a < 1000; a++) {
        for(int b = 1; b < 1000; b++) {
            for(int c = 1; c < 1000; c++) {
                if(a + b + c == 1000) {
                    if(pytha(a, b, c) == "true")
                        cout << "a= " << a << " b= " << b << " c= " << c;
                }
            }
        }
    }
}

请注意,此代码是非常效率的。关键是不是要解决问题,而是要知道为什么程序不编译。

pytha不返回其所有控制流路径上的值。

修复:

string pytha(int a, int b, int c)
{
    if (a*a+b*b==c*c)
        return "true";
    return "";
}

始终启用警告来编译您的代码。对于gccclang编译器命令行选项是-Wall -Wextra -Werror


您可能要使用bool类型而不是string

最新更新