我最近发现我在 Windows 8 机器上用 C 编写的一个相当大的图像处理程序在非常特殊的情况下使用时有一个错误。不幸的是,该错误导致我的整个计算机停止运行,因此我唯一的选择是拔掉计算机上的插头(尤其是在我远程工作时很烦人......)
因为它是一个图像处理程序,我不能只是用打印语句来隔离有问题的部分 - 问题发生在一个循环中的某个地方,这个循环被称为数十亿次,所以添加一个 printf 会减慢它的速度数天的迭代失败。
因此,我理解,如果这个问题太广泛,因为我放下所有可能导致我的问题的代码并不是很合理,我只是在问
在什么情况下 C 代码可以而不是段错误或停止程序,实际上卡住整个操作系统
当我搜索问题时,我看到这样的代码高尔夫问题
A C program which crashes the system(shuts down the system)
这不是我要问的 - 显然我没有在循环中的任何地方编写 system("shutdown") 。
最熟悉python和java,这个问题不是我习惯的,但以我的经验,
这种印象是错误的 - 这些情况会导致整个系统崩溃吗?我错过了哪些案例?它取决于我的 gcc 版本,还是我的权限状态?
我还没有能够尝试在不同的操作系统上重现它,因为它需要一些依赖项才能运行整个程序。
如果我唯一的选择是坐上几天等待程序用打印语句运行,或者避免出现奇怪的情况,那么,当然,就这样吧。我正在寻找寻找错误的关键位置。
最佳答案
在用户模式和内核模式之间具有硬件强制权限分离的现代系统,以及能够正确配置这些机制的操作系统上,您根本无法从用户模式进程中使系统崩溃。
这些错误中的任何一个都被 CPU 捕获,它调用操作系统中的异常处理程序,这将快速拔掉您系统上的插头。
如果我不得不猜测,某个硬件过热或出现故障:
我见过加密货币挖掘软件使系统崩溃,因为它正在插入 GPU 的极限。当卡锁定/重置时,驱动程序会感到困惑或锁定,最终需要重新启动系统。
当您只是坐在那里浏览网页等时,您的系统几乎无所事事。但是如果您的系统在您开始运行 CPU 密集型应用程序时锁定,它可能会带来您不知道在哪里出现的问题。
虽然这在 Stack Overflow 上有点不合适,但它属于硬件和软件之间的灰色区域之一。我会对您的系统进行压力测试,注意 CPU/GPU/内存温度和电源电压。退房 MemTest86 , Stresslinux .
关于c - 什么会导致 C 程序崩溃操作系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26479670/