XP で動いているアプリケーションを Vista に持っていくと、ある条件で異常終了してしまう。「何でかなぁ?Vista が悪いのかなぁ?」とかいいながら、調べてみる。
落ちるのは、GlobalFree 内。えっと。。。まぁ、スプーラなので、スプーラと情報共有する必要があるのかなぁ?とか何とか思いながら、調べる。…なんだ、このコードは?
原因付近のコード イメージ:
void someFunction() {
LPTSTR name[MAX_COUNT];
LPTSTR ptr = name;
int allocCount;
for (allocCount = 0;
allocCount < MAX_COUNT && allocCount < 実在する数;
allocCount++) {
*ptr++ = GlobalAlloc(必要なサイズ);
}
ここで name を使う
ptr = name;
for (int i = 0; i < allocCount; i++) {
GlobalFree(ptr++);
}
}
どうも、XP と比較して、Vista はメモリまわりを厳密に管理してくれるようで、気づきにくいバグを、ちゃんとお知らせしてくれるようになっています。Vista バンザイ!!
でも、どうして XP では動いていたんでしょうねぇ?というか、再現させるためにアプリケーションを作ったら、ちゃんと XP でも落ちるんですよ。そのアプリケーションだけ、動くんですね。不思議ですね。どうしてでしょうね?
投稿日時 : 2007年2月2日 22:16