gpt4 book ai didi

C++ 和可能的硬件故障

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:29:19 27 4
gpt4 key购买 nike

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

今天,我在过去一年左右一直在开发的程序中目睹了非常奇怪的行为。它是用 C++ 编写的,我使用的是 Visual Studio 2010。有两个无法解释的行为实例。

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

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

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

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

最佳答案

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

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

关于C++ 和可能的硬件故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14430553/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com