segmentation faultって何故出るのですか?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
デスクトップ

segmentation faultって何故出るのですか?

#1

投稿記事 by デスクトップ » 5年前

C言語って配列でint x[10];って指定しても
x[100]とかx[200]にアクセスできますよね?それなのに何故このエラーが出るのでしょうか?

アバター
tk-xleader
記事: 153
登録日時: 9年前
連絡を取る:

Re: segmentation faultって何故出るのですか?

#2

投稿記事 by tk-xleader » 5年前

 アクセスできない場所にアクセスしようとするからです。ちなみにx[100]とかが偶々アクセス可能な場所を示していた場合、変な場所のメモリが書き換えられたりしてたちの悪いバグの原因となります。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: segmentation faultって何故出るのですか?

#3

投稿記事 by softya(ソフト屋) » 5年前

C言語は軽量化と速度優先の設計で、そういう配列範囲外のチェックはしていません。
範囲外アクセスで、なにか問題が起きてもそれはプログラミングした人が責任を持つことになります。

> segmentation faultって何故出るのですか?

メモリでアクセス権限違反をしたからです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

デスクトップ

Re: segmentation faultって何故出るのですか?

#4

投稿記事 by デスクトップ » 5年前

アクセス権限違反って具体的になんでしょうか?
Cの場合。


相変わらず「送信されたフォームは不正です。もう一度フォームを送信してみてください。」が多い…

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: segmentation faultって何故出るのですか?

#5

投稿記事 by softya(ソフト屋) » 5年前

> アクセス権限違反って具体的になんでしょうか?

大雑把には、プログラム=アプリケーションに割り当て済みのメモリではないアドレスの場所の値を変更しようとした場合です。
【補足】 抜けがありました。割り当て済みでも書き込みできない所に書き込んだ場合もです。
細かく理解するには、仮想記憶やOSの仕組みを勉強して下さい。

> Cの場合。

言語は関係ありません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る