量子物理学で定義されたハイゼンベルクの不確定性原理に基づいて名前が付けられたコンピューターのバグ。つまり、構造を観察するとその状態が変化します。
実際には、次の 3 つのケースのいずれかが見つかります。
- プログラムはデバッガで実行されますが、コマンドラインでは実行されません
- デバッグのために printf() を追加するとプログラムは機能しますが、削除するとプログラムは機能しません
- このプログラムは、バグ管理技術が適用されている場合には機能しますが、これらの管理が製品バージョンから削除されている場合は機能しません。
多くの場合、この種のバグは、割り当てられる前に使用された変数に起因します。したがって、プログラムの起動時には未定義の状態になります。
ハイゼンバグのもう 1 つの原因は、「緩い」メモリ管理ポリシーにあり、メモリ リークやデータの上書きが発生しやすいです。動的メモリの処理方法については非常に厳密である必要があります。
例
Visual C++ には、デバッグモード (プログラム開発用) とリリースモード (通常は製品バージョン) があります。デバッグモードには、実際に必要なメモリよりも多くのメモリを予約するという「良い」考え方があります。この動作は、デバッグモードではプログラムがほとんどクラッシュしないのに対し、リリースモードではスタック オーバーフローによりプログラムが体系的にクラッシュすることを意味します。これはハイゼンバグです。解析したいときはデバッグモードにしないと消えてしまいます…

