C ++和可能的硬件故障

时间:2013-01-20 23:27:33

标签: c++ visual-studio-2010 hardware

硬件故障(例如RAM损坏)是否表现为C ++程序中的非理性但一致的行为?

今天,我在过去一年左右的一个项目中目睹了非常奇怪的行为。它是用C ++编写的,我使用的是Visual Studio 2010.有两个莫名其妙的行为实例。

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

第二个实例涉及方法A调用方法B并传递参数。调试时,传递的变量在传递给B之前是一个有效的字符串。一旦在B,参数为空。系统重启使事情再次正常。

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

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

3 个答案:

答案 0 :(得分:1)

如果您怀疑硬件,则应尝试使用其他计算机。也就是说,从实际上我一直认为RAM故障是故障或编译问题的原因,没有一个是。最可能的原因是:

  • 未定义的行为不仅适用于未初始化的变量,也适用于未在返回中完成的函数路径。你应该使用某种Lint。
  • 错误的编译脚本或makefile。您认为您正在使用库版本X,但实际上您正在链接到其他版本的Y,或者有时版本链接到另一个版本不同的文件,特别是使用不同的Debug / Test / Release版本。
  • 优化与未优化时库的不同行为。
  • 主题。在每种可能的情况下检查您的写/读访问权限。如果可以,请使用一些强大且经过同行评审的稳定库。

答案 1 :(得分:0)

不,你可以确定问题不是你的硬件。否则其他应用程序的行为会不正确。

答案 2 :(得分:0)

硬件故障往往会影响系统中的MOST,而不仅仅是一个应用程序。如果您怀疑您的计算机存在问题,请尝试运行内存测试 - 这也将测试CPU的行为(尽管更不可能以仅影响某些软件的方式中断)。

我相信你的软件正遭受“未定义的行为”而不是硬件故障......你要么在允许的区域之外写作,要么使用未初始化的变量,或者其他类似的东西。尝试简化您的代码,如果您可以使用15-50行代码,请在此处发布。