chowe
http://chowe.blog106.fc2.com/
World Wide Weblog
スポンサーサイト
-------- -- --:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

別窓 | スポンサー広告 | top↑
0-1は-1じゃない
2012-01-31 Tue 06:53
20120131追記-----
疑似コードの < が記事に反映されなかったのを修正しました。
-----


0-1は-1じゃない。4294967295なのだ。
今日プログラムを書いていて、あまりに馬鹿げたエラーを出したのでひとつ笑っていただきたい。


最近、for文で

for( int i=0; i<n; i++)

などとするとき、この添え字のiが何かの個数・・・配列の要素のインデックスとか・・・を表してる場合にはintじゃなく、unsigned intを使うようにしていたのだ。今日問題となったコードもそう。いつもはこれでいいのだが、今日のは一味違った処理をしたんだよ。

m番目の要素から初めて、前方へ見ていくのと後方へ見ていく2方向のfor文を書いたのだ。こんなふうに。

for( unsigned int i=m; i>=0; i-- ){
...
// a[i]を使った処理
...}

for( unsigned int i=m; i<n; i++){
...
// a[i]を使った処理
...}

ぁー。やっちゃったよ。Owatta


何、分からない?眠いか何かのために、何がどう悪かったか分からない人は続きを見てほしい。
問題は最初のカタマリですね。

for( unsigned int i=m; i>=0; i-- ){
...
// a[i]を使った処理
...}

iはunsigned intなので、i=0の処理が終わってi--・・・つまり0-1・・・が実行された瞬間、
i=unsigned intで表現できる最大の数(もちろん正の数)
になるのだ。僕のPCでは4294967295とかだったかな。

するとこれはもちろん i>=0 を楽々クリアして{...}の中に入り、a[4294967295]となって、
vectorの要素数超えエラーになるのです。
あー残念。
何が残念ってこんなのしちゃった自分がだ。
別窓 | プログラミング | コメント:0 | トラックバック:0 | top↑
<<寒いです。 | ―*暫定住居*― | 同僚の旅立ち>>
この記事のコメント
コメントの投稿
 

管理者だけに閲覧
 

この記事のトラックバック
| ―*暫定住居*― |
copyright © 2006 ―*暫定住居*― all rights reserved. powered by FC2ブログ. template by [ALT DESIGN].
/
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。