编程接收到的信号SIGSEGV,在代码块中调试时出现分段错误

时间:2019-07-04 17:08:09

标签: c++

我是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-means-Program-received-signal-SIGSEGV
根据这一点,我的程序引用的是它无法访问的存储位置。但是我看不到任何限制此代码访问某些内容的东西。

  1. Program received signal SIGSEGV, Segmentation fault error

3。Debug---Program received signal SIGSEGV, Segmentation fault

  1. program received signal SIGSEGV, segmentation fault

  2. "Program received signal SIGSEGV, Segmentation fault."

  3. Program received signal SIGSEGV, Segmentation fault

  4. Program received signal SIGSEGV, segmentation fault, Linked list program

他们中没有一个回答我的查询,因为我无法将他们中提到的代码与我的代码相关联。 编号为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;
                }
            }
        }
    }
}

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

1 个答案:

答案 0 :(得分:5)

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