閑古鳥

オールドプログラマの日記。プログラミングとか病気(透析)の話とか。

CodeGuard のおせっかい

どうやら以下の配列の先頭アドレスを引いたものに対するアクセスは未定義らしいです。ので、以下の手法は使用しないでください。
どうも配列の先頭アドレス -1 を行って得られる値 (アドレス) が全然関係ないメモリアドレスになってしまう可能性があるそうです。
参考: C FAQ 1

Borland C++ Builder には CodeGuard というメモリリークなどをチェックしてくれるツールがあるのですが、これが便利なことは便利なのですがバグがあったり余計なお節介を焼いてくれたりなかなか微妙です。

今日はメモリのアンダーランとか出るので、なんだろうと見てみたら以下のコードで引っかかっていました。

>

int main()
{
int src[] = {5, 4, 3, 2, 1};
int* dst = src - 1;

for(int i = 1; i <= 5; ++i) {
std::cout << dst[i] << std::endl;
}

return 0;
}