OSDN Ticket Archive


Ticket #39229

Win版 コード分析対応

登録: 2019-05-08 00:06 最終更新: 2019-05-12 11:08

報告者:
yknk
担当者:
yknk
チケットの種類:
バグ
状況:
完了
コンポーネント:
MIDITrail Ver.1.2.x for Windows
マイルストーン:
Version 1.2.5 for Windows (完了済み)
優先度:
5 - 中
重要度:
5 - 中
解決法:
修正済み
ファイル:
なし

詳細

Visual Studio 2017のコード分析で抽出された問題を修正する。

チケットの履歴

2019-05-08 00:06 更新者: yknk
  • 新しいチケット "Win版 コード分析対応" が作成されました
2019-05-08 00:07 更新者: yknk
コメント

対策 1:ローカル変数初期化漏れ

ローカル変数の初期化漏れが多数検出された。初期化漏れの事例は以下の通り。

float x, y, z = 0.0f;
この場合zは0.0fで初期化されるが、x,yは初期化されないままとなる。 以下のように、変数ごとに初期化しなければならない。
float x = 0.0f;
float y = 0.0f;
float z = 0.0f;
メソッド内でローカル変数に必ず値を設定しているため、動作上問題は発生しないが、 修正しておく。

初期化漏れを洗い出すために、以下の正規表現でgrepした。

,\s*[a-zA_Z0-9]+\s*=

2019-05-08 00:09 更新者: yknk
コメント

対策 1:ローカル変数初期化漏れ(続き)

grep結果は以下の通り。変数単位で初期化するように修正した。

DXColorUtil.cpp(36): 	float cr, cg, cb, alpha = 0.0f;
DXColorUtil.cpp(72): 	long cr, cg, cb = 0;
MTDashboard.cpp(249): 	unsigned long cw, ch = 0;
MTDashboard.cpp(250): 	unsigned long tw, th = 0;
MTDashboard.cpp(251): 	unsigned long charHeight, charWidth = 0;
MTDashboardLive.cpp(160): 	unsigned long cw, ch = 0;
MTDashboardLive.cpp(161): 	unsigned long tw, th = 0;
MTDashboardLive.cpp(162): 	unsigned long charHeight, charWidth = 0;
MTFirstPersonCam.cpp(204): 	int dX, dY, dW = 0;
MTFirstPersonCam.cpp(570): 	int wh, ww = 0;
MTFirstPersonCam.cpp(571): 	int ch, cw = 0;
MTFontTexture.cpp(83): 	DWORD x, y = 0;
MTGridBox.cpp(397): 	unsigned long i, j = 0;
MTNoteDesign.cpp(206): 	float bh, bw = 0.0f;
MTNoteDesign.cpp(237): 	float bh, bw = 0.0f;
MTNoteDesign.cpp(272): 	float bh, bw = 0.0f;
MTNoteDesign.cpp(301): 	float x, bh, bw = 0.0f;
MTNoteDesign.cpp(336): 	float x, bh, bw = 0.0f;
MTNoteDesign.cpp(565): 	float r,g,b,a = 0.0f;
MTNoteRipple.cpp(403): 	float rh, rw = 0.0f;
MTPianoKeyboard.cpp(1718): 	float centerY, centerZ = 0.0f;
MTPianoKeyboardDesign.cpp(639): 	float r,g,b,a = 0.0f;
MTPianoKeyboardDesign.cpp(895): 	float ox, oy, oz = 0.0f;

2019-05-08 00:09 更新者: yknk
コメント

対策 1:ローカル変数初期化漏れ(続き)

grep結果の続き。

MTScenePianoRoll3D.cpp(494): 	float phi, theta = 0.0f;
MTScenePianoRoll3D.cpp(534): 	float phi, theta = 0.0f;
MTScenePianoRoll3D.cpp(571): 	float phi, theta = 0.0f;
MTScenePianoRoll3D.cpp(797): 	float x, y, z = 0.0f;
MTScenePianoRoll3D.cpp(798): 	float phi, theta = 0.0f;
MTScenePianoRoll3DLive.cpp(474): 	float phi, theta = 0.0f;
MTScenePianoRoll3DLive.cpp(514): 	float phi, theta = 0.0f;
MTScenePianoRoll3DLive.cpp(551): 	float phi, theta = 0.0f;
MTScenePianoRoll3DLive.cpp(732): 	float x, y, z = 0.0f;
MTScenePianoRoll3DLive.cpp(733): 	float phi, theta = 0.0f;
MTScenePianoRollRain.cpp(460): 	float phi, theta = 0.0f;
MTScenePianoRollRain.cpp(489): 	float phi, theta = 0.0f;
MTScenePianoRollRain.cpp(527): 	float phi, theta = 0.0f;
MTScenePianoRollRain.cpp(755): 	float x, y, z = 0.0f;
MTScenePianoRollRain.cpp(756): 	float phi, theta = 0.0f;
MTScenePianoRollRain2D.cpp(66): 	float phi, theta = 0.0f;
MTScenePianoRollRain2DLive.cpp(66): 	float phi, theta = 0.0f;
MTScenePianoRollRainLive.cpp(442): 	float phi, theta = 0.0f;
MTScenePianoRollRainLive.cpp(471): 	float phi, theta = 0.0f;
MTScenePianoRollRainLive.cpp(509): 	float phi, theta = 0.0f;
MTScenePianoRollRainLive.cpp(692): 	float x, y, z = 0.0f;
MTScenePianoRollRainLive.cpp(693): 	float phi, theta = 0.0f;
MTStars.cpp(158): 	float x, y, z = 0.0f;
MTStars.cpp(159): 	float cr, cg, cb = 0.0f;

2019-05-08 00:10 更新者: yknk
コメント

対策 2:判定文の記述ミス

いずれも動作不良を引き起こすものではないが、修正する。

DXRenderer::_RecoverDevice

修正前:else if (D3DERR_DRIVERINTERNALERROR) {
修正後:else if (hresult == D3DERR_DRIVERINTERNALERROR) {

MTWindowSizeCfgDlg::_GetConfWindowSize

修正前:if ((pHeight == NULL) || (pHeight == NULL)) {
修正後:if ((pWidth == NULL) || (pHeight == NULL)) {
2019-05-12 11:08 更新者: yknk
  • 解決法なし から 修正済み に更新されました
  • 状況オープン から 完了 に更新されました

添付ファイルリスト

添付ファイルはありません