それ違うから

2017/11/26

今までメンテナンスしていたプログラムの64bit化をやってます。そうすると問題がちょこちょこ出てきます。これは今まで隠れていた類の問題のはず。

long foo(LPTSTR arg1, LPTSTR arg2)
{
  TCHAR a[129];
  TCHAR b[129];

(略)

  RegOpenKey(略);
  QueryValueEx(略);

}

メンバーがこんな感じのコードで、何度も呼び出していると正しく値が取れないと言ってきました。そして、こうすれば大丈夫だと。

long foo(LPTSTR arg1, LPTSTR arg2)
{
  TCHAR a[129];
  TCHAR c[129]; //追加
  TCHAR b[129];

(略)

  RegOpenKey(略);
  QueryValueEx(略);

}

…いやそれスタック壊しているだろ普通。なんでこういう回避を真っ先に思い浮かべるんだ〜。「変数を一つ追加すれば治りました」といって、知らんぷりする。当然「こんな修正はだめだ」というのですが、「なぜこの修正がいけないんだ?これ以上調べようがないんだしいいじゃないか」と、言う感じ…。やっぱりスタックとか意識してほしいが、普通の仕事するだけじゃダメなんかなぁ。もう一歩踏み出すとか、そういう知識が必要なんだと理解するところから始めないと、馬の耳に念仏状態になってしまう。