« フリーゲーム | トップページ | 使ってみなイカ? »

2010年11月 1日 (月)脛をかじらない人生

おはようございます。本日の当番、プログラマーのT.Tです。
プログラムのよくあるバグをなんとかしてみようのコーナーです。
なんと第1回目です。たぶん。

今日のお題は・・・配列の添え字オーバー

int i[3]; と、ここにタネもしかけもない配列があります。

この配列を・・・、
i[4] = 5; とか、
i[-1] = 3; とかしちゃうとバグになりますねー。大変ですねー。(

さすがにこういうすぐわかるレベルのはありませんが、
添え字に変数を使うと、このバグが現れてきます。
仕事中でもちょくちょく見ます。

前後のメモリに割り当てられてる変数を壊し、
その変数にアクセスしているところでエラーが出るため、
かなり辿っていかないと原因が判別できません。

 
解決方法として、
CArrayとか「配列の代わりになるテンプレートクラス」を作りましょう。
テンプレートに変数型と配列容量を入れて宣言するクラスです。

CArray i; って感じに宣言できるように作ります。

また、値取得には operator を使い、
宣言の時以外は通常の配列と同じ振る舞いにします。

さらに operator 内に「添え字の限界アサート」を入れておくことで、
添え字が正常値以外ならその場でプログラムは停止します。

これでエラー箇所が一発でわかるようになります。

 
このバグはいつもうるさいワーニングカーチャンは教えてくれません。
プログラムにもカーチャンの手を離れて一人立ちしなきゃいけない部分があるようです。
エラートーチャンとワーニングカーチャンの脛かじってばかりじゃいけませんね。

 
 
え?初期化しにくい?

脛をかじらない人生には、気合いで乗り越える場面も必要です。

follow us in feedly
result = encodeURIComponent( "http://www.accessgames-blog.com/blog/2010/11/post-21a6.html" );document.write( "result = " , result );&media=https%3A%2F%2Ffarm8.staticflickr.com%2F7027%2F6851755809_df5b2051c9_z.jpg&description=Next%20stop%3A%20Pinterest">

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

« フリーゲーム | トップページ | 使ってみなイカ? »

プログラマー」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 脛をかじらない人生:

« フリーゲーム | トップページ | 使ってみなイカ? »