多桁開根確認中、数バイトのnewでヒープ破壊の例外発生。
何が原因かは目下不明。
Free Heap block xxxxxxxx modified at yyyyyyyy after it was freed
と言われるので、yyyyyyyyアドレスを見ると、確かに周りと違う値。
参照変数は、別スコープに移動したし・・・飛び地を不用意に書き換える処理は入っていないはず。
OS再起動して再現するようなら調査続行か。
(1時間後)
こういうとき、自分で書いたコードだと、大体頭に入っていて、画面を見ずにトレースできる。
んで、1か所おかしげな箇所を発見。
具体的には、配列要素を参照する変数で、配列を解放しても、変数を使って代入とかやっちゃってるところがあった。
簡単に書くと、
char * a = new char[100];
char &b = a[99];
delete[] a;
b = 'b';
といった感じ。
#実際には、delete後にaは再度確保されていて、さらに別関数で解放再確保が行われるため、ぱっと見は正しいコードであるかのように見えてしまっていた。
こりゃ解放後に書き換えられてるって怒られても仕方ない。
#既存公開関数ではこんなコード無いので少し安心。
にしても、高速化のため、添え字演算まで減らそうと努力して、この有様。
コメントしちゃいなよ