低レベルなバグだったので反省込めてメモる。そして二度と思い出さないことにする。
本バレが嫌なので言語をC#に変換しとく。
intの配列(つまりint[])の間に要素を一つ挿入するメソッドを書いてた。
var v = new[] { 1, 2, 3, 4, 5, 6, 7, 8 };
v = InsertArray(v, 2);//v = {1,2,0,3,4,5,6,7,8}
InsertArray()をさっくり作った
static int[] InsertArray(int[] p_array,int p_index) {
int[] result;
result = new int[p_array.Length + 1];
for(int i=0; i < p_array.Length; i++) {
if (i < p_index)
result[i] = p_array[i];
if (i == p_index)
result[i] = 0;
if (i > p_index)
result[i + 1] = p_array[i];
}
return result;
}
境目でバグ起こすんじゃね?と引っかかりながらも当時は必死でとりあえず実戦投入してシステムは動いたのでOKとしてた。
ソースコードレビュー?何それおいしいの?
で、後日追加の改修が入ったときに余裕があったのでInsertArray()をきちんとテストしてみると、やっぱし挿入部分でバグ起こしてやがった。
var v = new[] { 1, 2, 3, 4, 5, 6, 7, 8 };
v = InsertArray(v, 2);//v = {1,2,0,0,4,5,6,7,8}
たまたまシステムでは挿入部分付近は参照していなかったのでセーフだったがメソッドが名前通りには機能していないのは気持ち悪い。
修正したいけどシステムの動作は問題ないわけで修正するための理由が見つからぬ。
どうせ数か月のうちには消滅することが確定しているシステムなのでこのメソッドのバグはこのまま闇に葬ろう。