我的质数生成器崩溃了,被Windows 10关闭了
My prime number generator crashes and is closed by Windows 10
我过去也使用过代码块,但从未遇到过这样的问题。
我在数字1到1000之间写了一个质数生成器,当我点击build> build并运行时,我得到一个对话框,"一个问题导致程序停止正常工作…",我只有一个选择,那就是关闭程序。
我关闭程序后,我在控制台窗口上看到的是"进程返回255 (0xFF)"。当我关闭控制台窗口时,我看到用红色高亮显示的白色文本"进程终止,状态为-1073741510"。
在我重置电脑之前,这个程序可以正常运行。在Windows 10上运行
任何帮助都将不胜感激。
我的代码是-
#include <iostream>
using namespace std;
int main() {
int facts = 0;
for(int i = 0; i < 1001; i++) {
facts = 0;
for(int j = 0; j < (i + 1); i++) {
if(i % j == 0) {
facts ;
}
}
if(facts > 2) {
cout<<i;
}
}
return 0;
}
您尝试过使用调试器吗?我拿了你的代码,在内循环的facts
前面添加了缺失的++
,然后看:
$ g++ -std=c++14 -Wall -Wextra -Wpedantic -ggdb test.cpp
$ gdb ./a.out
+(gdb) run
Starting program: /home/???/src/a.out
Program received signal SIGFPE, Arithmetic exception.
0x0000000000400702 in main () at test.cpp:8
8 if(i % j == 0) {
+(gdb)
如果我在这行之前添加一个诊断cout << i << ' ' << j << std::endl
,那么所有打印的内容都是这样的…
0 0
…就在gdb
和SIGFPE
失效之前。因此,循环在第一次尝试时失败。为什么?因为模是除法的另一边,所以引用的行试图除以零。不能除以0。不要试图除以0。
为什么?在C和c++中,除0是调用未定义行为的众多选项之一,这也引起了数学家之间无休止的争论。你需要尽早并且很好地学习这个概念。编译器不需要阻止您做这些事情。但是这个行为使你的整个程序无效并且容易爆炸。我的CPU引发硬件异常。你的可能会做同样的事情,可能会做其他事情……UB意味着程序可以做任何的事情——包括看起来工作正常,但它在一个不相关的领域神秘地失败了,让你花几个小时去寻找转移注意力的东西,直到你找到令人尴尬的原因。信任我。这就是为什么我们不调用UB。
在您的代码中可能还有其他错误,但这是最明显的错误,也很容易发现。正如drescherjm所指出的…
for(int j = 0; j < (i + 1); i++)
应该是for(int j = 2; j < (i + 1); j++)
,然后将(facts > 2)
更改为(facts > 1)
…试图除以0是因为你的数字是错误的。
在我重置电脑之前,这个程序可以正常运行。在Windows 10上运行
再次说明:未定义行为意味着任何事情都可能发生。它可能开始看起来在明天或当风向改变正确时再次工作。那不代表什么。调用UB的代码是不正确的,必须不惜一切代价避免。
- Windows桌面程序保存您的计算机会话 - 基于程序崩溃时的恢复会话
- 在Windows上调试linux崩溃转储
- 从 C# Windows 应用程序调用 C dll 会导致 svchost.exe 崩溃
- UCRTbase.dll涉及TCP通信的C ++ Windows Embedded Standard崩溃
- 简单的文本文件格式化在linux下崩溃,但在Windows中很好
- 正则表达式在 Windows 上初始化时崩溃
- Windows 10 Creators Update(1703)崩溃了我们的应用程序
- Malloc()/free()在Windows上的几个线程中崩溃
- 当使用 /ENTRY:main 和 /MT 运行时库编译为 /SUBSYSTEM:WINDOWS 时,应用程序崩溃
- Windows C++程序中的访问冲突是否总是立即崩溃
- Windows/c - 从第三方EXE加载图标,用于SDL_SETWINDOWICON-崩溃
- libtorrent和tcp ::受体在Windows上崩溃并违反访问
- 当STDERR重定向到管道时,为什么BOOST ::流程在Windows上崩溃
- 程序在Windows中的DLL边界上使用嵌入式Python/C 代码崩溃
- 我的程序在Windows机器上崩溃了,但在Linux上运行良好
- GMock 测试夹具在 Windows 上崩溃
- 带有ATL子类的Windows 10 64位上的随机崩溃
- log4clus:在Logger:上崩溃:在Windows上关闭
- std::endl 导致使用 MinGW 编译的 Windows 8 崩溃
- 在没有安装Visual Studio的情况下获得Windows崩溃的堆栈跟踪?(c++)