NOEMBLEM/エンブレムが設定されていません。

メールの詳細(トピック表示)

配列の値が勝手に変わってる!!

投稿者:クーマさん  2007/10/11 22:32  MLNo.122   [メール表示]

今回、プログラムでN_Dっていう配列に値をいれていましたが。。。。。。
以下のプログラムを通すと。。。。
(W12=W23=配列です!)




//random coefficient setting
for(q=0;q<3;q++){
for(r=0;r<4;r++){
assert(r+q*4 < W12_SIZE);
W12[r+q*4]=ran0(-1,1);
// printf("W12[%d]=%lf\n",r+q*4,W12[r+q*4]);
}
}

for(q=0;q<L2_SIZE;q++){
assert(q < W23_SIZE);
W23[q]=ran0(-1,1);
// printf("W23[%d]=%lf\n",q,W23[q]);

} //random complete


なんとN_Dの値が勝手に変わってました。
なぜでしょう。。。。。

ちなみにW12のサイズは4でした。。。。
原因は、、w12のサイズのオーバーでした。。。。。。

なんで、使用するときはサイズの確認が必須ですね(><)



 読み込み中...

  • MLNo.123   いけぷ〜さん  (0) 2007/10/12 19:08  [メール表示する]
    クーマさんありがとうございます。
    このバグも横でチェックしていたのですが、

    結局、作っていた配列の大きさを越えた位置(インデクス:index)を指定して
    値を書き込んでしまったので、他の配列の値が書き換わってしまった。
    というバッファオーバーフローによるバグでした。

    こういったバグを防ぐには、配列のインデクスの範囲が
    配列のサイズを越えないことを毎回確認しておくことです。

    確認の上で assert() を使って、インデクスが配列サイズを
    越えてしまったときに強制終了されるようにしておくと、
    見逃しを防ぐことができます。


メールへの返信はMLのメンバーしかできません。

更新順メールリスト

これが憧れの4LDK超/SUUMO