_tcscpy_sで1日が消えた話

1日が消えた話

ある日のことである(今日)。

ある事情から久しぶりにC++でプログラミングをしていたUMU氏。

配列にデータを入れるところで関数内の全く関係ないデータが破壊される事件に悩んでいた(丸一日)。

このバグの正体は、msdnの英文の読み間違いから起きたものだった。

_tcscpy_s関数の第二引数numberOfElementsの説明(引用):

Size of the destination string buffer in char units …

この文をよく読まなかった結果,私は次のように解釈した。

誤)コピー先の文字列バッファのサイズ(Byte単位の)

しかし、実際は

正)コピー先のchar単位の文字列バッファのサイズ

このようにした結果、私は正しい数値よりもsizeof(char)の分だけ大きな値を_tcscpy_sに指定しまっていたことになる。

この結果、_tcscpy_sによってバッファとは何ら関係のない領域まで書き込みデータを破壊してしまったものと考えられる。

結論

ちゃんとよもう。

Posted on