visual studio 2010 - c++和可能的硬件故障

visual studio 2010 - C++ and possible hardware failure

本文关键字:硬件故障 c++ studio 2010 visual      更新时间:2023-10-16

硬件故障(例如RAM损坏)在c++程序中表现为不合理但一致的行为吗?

今天我目睹了一个我过去一年左右一直在做的程序的非常奇怪的行为。它是用c++写的,我用的是Visual Studio 2010。有两个令人费解的行为。

第一个涉及特定类的构造函数。在我做了一些代码修改(在其他地方,而不是在构造函数中)并重新构建项目后,内存飙升至最大值并冻结了我的操作系统(类似于我一年前由于优化而遇到的问题,但这次优化被禁用了)。在调试时,我意识到在构造函数中无法访问断点,这意味着没有生成代码。如果我在代码的其他地方在结构体中添加了两个成员变量,构造函数又神奇地工作了。

第二个实例涉及方法a调用方法B并传递参数。在调试时,传递的变量在传递给B之前是一个有效的字符串。一旦到达B,参数为空。系统重新启动后,一切又恢复正常了。

这让我认为我的RAM可能有问题-重新启动后,程序可能会在内存的不同部分运行,因此不会遇到问题。我正在使用的这台机器过去确实出现过几次蓝屏,不过不是经常出现。运行Windows内存诊断工具没有发现问题,但我仍然怀疑。

当你不知道事情发生的原因时,很容易责怪环境,但我以前从未见过这样的事情。我只是想问一下,硬件故障影响这样一个程序是否有意义。

如果您怀疑硬件,您应该尝试其他计算机。也就是说,我一直认为RAM故障是导致故障或编译问题的原因,但事实并非如此。最可能的原因是:

  • 未定义的行为,不仅对于未初始化的变量,而且对于没有返回结束的函数路径。你应该用一些纱布。
  • 错误的编译脚本或makefile。你认为你正在使用库X,但你实际上是链接到其他版本Y,或者有时相同的版本,但另一个不那么平等的文件,特别是不同的调试/测试/发布版本。
  • 库在优化和未优化时的不同行为。
  • 线程。在每一个可能的场景中检查你的写/读访问。如果可以的话,使用一些健壮且经过同行评审的稳定库。

不,您可以非常肯定问题不在您的硬件。否则其他应用程序将有不正确的行为。

硬件故障往往会影响系统中的大多数东西,而不仅仅是一个应用程序。如果你怀疑你的机器有问题,试着运行一个内存测试——这也将测试CPU的行为(尽管这更不可能以只影响某些软件的方式中断)。

我相信你的软件是"未定义的行为"而不是硬件故障…您要么在允许的区域之外写入,要么使用未初始化的变量,或者沿着这些行进行其他操作。尽量简化你的代码,如果你能把它写在15-50行代码内,就在这里发布。