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