▼G神さん:
返信と説明有難う御座います。
>指摘のバグは、SMART値のスレッショルドテーブルを出力するか否か、本来であれば「編集」-「コピーオプション」-「SMART_READ_THRESHOLD」メニューのチェックON/OFF状態に従うべきところを、「SMART_READ_DATA」チェック状態のON/OFFで判定しているというものです。
>
>そのため「SMART_READ_DATA」がOFFの状態で、「SMART_READ_THRESHOLD」のみONにしても、スレッショルドテーブルはファイル出力等されず、「SMART_READ_DATA」がONの状態なら、「SMART_READ_THRESHOLD」のON/OFFに関係なく、スレッショルドテーブルが出力されるという動きになります。
>
>それ以外の挙動に対しては、関係はないと思います。
3割位?しか理解出来てませんが、直接関係無い事は分かりました。
>ただ、気になったのが、プログラムの中核的なデータである、ATA_SMART_INFO を構造体として宣言していますが、コンストラクタが定義されていません。(Cと違いC++ではclassとstructはメンバのデフォルトの扱いがpublicか否かでほぼ同じ。class同様コンストラクタやデストラクタも定義できます)
>
>そのためATA_SMART_INFO型の変数を使う都度、明示的に初期化しない限り、構造体メンバ変数の初期値が不定になるため、それが廻り廻って再現性のないバグの原因になっている可能性はあります。
そうそう。(~_~;)
初期化してないDataのせいで、再現環境が分らなかったり一定しなかったり、っていうのは、それなりにプログラム開発の仕事に従事してた経験で、よーーーーーく分かります。
>ATA_SMART_INFO が構造体のままでも、とりあえずコンストラクタを定義することは可能です。 再現性のないバグを排除する目的なら、全てのメンバを自動で初期化するため、早急にコンストラクタを定義することと、併せて代入演算子(operator =)や、複製を作るコピーコンストラクタを定義した方がよいと思います。
>
>あと気になったのは、APIの呼び出し結果をチェックせずにその後の処理を行っているとかですね。
>APIによっては、特定条件下で呼び出した場合、必ず失敗するとかありますから。
丁度、職場にC言語が導入されかけた頃に、プログラム開発の仕事から離れたせいで、専門的な事は分かりませんが、何となーーーく分かりますねぇ。(^o^;)