ヒープ破壊?

| コメント(0) | トラックバック(0)

多桁開根確認中、数バイトの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は再度確保されていて、さらに別関数で解放再確保が行われるため、ぱっと見は正しいコードであるかのように見えてしまっていた。

こりゃ解放後に書き換えられてるって怒られても仕方ない。
#既存公開関数ではこんなコード無いので少し安心。

にしても、高速化のため、添え字演算まで減らそうと努力して、この有様。

トラックバック(0)

トラックバックURL: http://blog.fne.jp/mt/mt-tb.cgi/101

コメントしちゃいなよ

    

サイトカウンタ

Total: 201,736 Hits, (Recent24Hours: 39 Hits)
~ Since 2010/01 ~

埋め込みツイッター

取得失敗;;
Now: 2017/08/24 15:46:41 JST

このブログ記事について

このページは、ふぅみんが2010年2月19日 10:02に書いたブログ記事です。

ひとつ前のブログ記事は「多桁開根ちょっと加速」です。

次のブログ記事は「多桁開根もう少し加速」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

2017年8月

 日   月   火   水   木   金   土 
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

埋め込みQRコード