2013/05/15

デバッグ時の_tcscpy_s

VC++で、_tcscpy_s(dst, dstLength, src); とやったとき、デバッグビルドしたモジュールではdstの先頭からdstLengthまでしっかり「0xDF」で埋められる。

つまり、dstを確保したサイズよりも大きくdstLengthをやっちゃうと関係ないとこのメモリの内容が「0xDF」で埋められる…

みごとに重要な(でも無関係な)データをぶっ壊しており、違うとこでバグになってた。違うとこでバグってのが厄介なんだよね。
しかもリリースビルドモジュールでは問題が起こらない。リリースモジュールはうまくいくのにデバッグモジュールはダメなとき、知識として知ってないと分かりにくいバグになるんじゃないかな。

dstLengthが分かんないとき、_tcscpyで動いてるとこを適当なdstLengthを指定して_tcscpy_sに置き換えるとバグになるってことだ。
まぁdstLengthがいい加減だとセキュアの意味が全くなくなるから良いんだけど。

0 件のコメント:

コメントを投稿