- ベストアンサー
バッファオーバーフローについて
プログラムを書き換えてないでmakeし実行すると バッファオーバーフローになったりならなかったりします。 なぜでしょうか? 大きなプログラムは書いていません。 OS:windows7 visual studio2005
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
そのバッファオーバーランの有無はどうやって調べたのでしょうか? 単に、エラーが発生するかどうか、で判断しているのなら ・バッファオーバーランが発生してエラーになる ・バッファオーバーランが発生したけど、たまたまエラーにはならなかった の両方とも起り得るので、「エラーで止まらない」≠「バッファオーバーランが無い」です。 他に、 int i, a[10],b ; b=a[i]; 等と、変数を初期化していないまま参照したとき、iの状態によってバッファオーバーランになったりならなかったりします。
その他の回答 (1)
- Wr5
- ベストアンサー率53% (2173/4061)
回答No.1
ポインタや配列の添え字の扱いを間違っている箇所があるのでしょう。 大きいプログラムかどうかなんてのは関係ありません。 下記のコードだけでバッファオーバーランできますし。 # a[10]にアクセスしてる。 int main() { int a[10],i; for(i = 1;i <= 10; i++) { a[i] = i; } return 0; } 条件によって正しい範囲内だけの使用で済んでいれば、「なったりならなかったり」という事にもなるやも知れません。 具体的なコードも掲示されていないようですから、自力で探して下さい。