C言語って配列でint x[10];って指定しても
x[100]とかx[200]にアクセスできますよね?それなのに何故このエラーが出るのでしょうか?
segmentation faultって何故出るのですか?
- tk-xleader
- 記事: 158
- 登録日時: 13年前
- 連絡を取る:
Re: segmentation faultって何故出るのですか?
アクセスできない場所にアクセスしようとするからです。ちなみにx[100]とかが偶々アクセス可能な場所を示していた場合、変な場所のメモリが書き換えられたりしてたちの悪いバグの原因となります。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: segmentation faultって何故出るのですか?
C言語は軽量化と速度優先の設計で、そういう配列範囲外のチェックはしていません。
範囲外アクセスで、なにか問題が起きてもそれはプログラミングした人が責任を持つことになります。
> segmentation faultって何故出るのですか?
メモリでアクセス権限違反をしたからです。
範囲外アクセスで、なにか問題が起きてもそれはプログラミングした人が責任を持つことになります。
> segmentation faultって何故出るのですか?
メモリでアクセス権限違反をしたからです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: segmentation faultって何故出るのですか?
アクセス権限違反って具体的になんでしょうか?
Cの場合。
相変わらず「送信されたフォームは不正です。もう一度フォームを送信してみてください。」が多い…
Cの場合。
相変わらず「送信されたフォームは不正です。もう一度フォームを送信してみてください。」が多い…
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: segmentation faultって何故出るのですか?
> アクセス権限違反って具体的になんでしょうか?
大雑把には、プログラム=アプリケーションに割り当て済みのメモリではないアドレスの場所の値を変更しようとした場合です。
【補足】 抜けがありました。割り当て済みでも書き込みできない所に書き込んだ場合もです。
細かく理解するには、仮想記憶やOSの仕組みを勉強して下さい。
> Cの場合。
言語は関係ありません。
大雑把には、プログラム=アプリケーションに割り当て済みのメモリではないアドレスの場所の値を変更しようとした場合です。
【補足】 抜けがありました。割り当て済みでも書き込みできない所に書き込んだ場合もです。
細かく理解するには、仮想記憶やOSの仕組みを勉強して下さい。
> Cの場合。
言語は関係ありません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。