c++ - 程序收到信号 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-means-Program-received-signal-SIGSEGV
根据这个,我的程序指的是它无权访问的内存位置。但我没有看到任何限制此代码访问某些内容的东西。
3. Debug---程序收到信号SIGSEGV,Segmentation fault
他们都没有回答我的问题,因为我无法将其中提到的代码与我的代码联系起来。编号为 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 "";
}
始终在启用警告的情况下编译您的代码。Forgcc
和clang
编译器命令行选项是-Wall -Wextra -Werror
.
您可能想使用bool
type 而不是string
.
推荐阅读
- rest - 如何使用 REST API 将文件和附件上传到 sobject 记录?
- jovo-framework - Jovo 部署无法找到 ask-clik
- swift - didRegisterForRemoteNotificationsWithDeviceToken 没有被触发 - 推送通知不起作用
- react-native - Expo共享链接不可点击
- java - 从 Java 8 中的对象列表中获取多个属性列表
- javascript - 程序错误时在外部模块中完成写入流
- javascript - 从 node.js 中的 .MHT 文件中提取图像
- javascript - 有没有办法将 React 组件代码显示为
tag?
- hpc - Singularity 容器中的文件所有权和权限
- vue.js - 如何从 vuejs 根路由器中删除#?