_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: 2015年10月12日, by : UMU