Path: ccsf.homeunix.org!ccsf.homeunix.org!news1.wakwak.com!nf1.xephion.ne.jp!onion.ish.org!news.daionet.gr.jp!news.yamada.gr.jp!newsfeed.media.kyoto-u.ac.jp!oix.u-ryukyu.ac.jp!u-ryukyu.ac.jp!ie.u-ryukyu.ac.jp!gama.is.tsukuba.ac.jp!nadesico.cc.tsukuba.ac.jp!hagi.cc.tsukuba.ac.jp!not-for-mail From: MAEDA Atusi Newsgroups: fj.comp.lang.c Subject: Re: Initializing arrays Date: 20 Jan 2004 16:04:46 +0900 Organization: Science Information Processing Center, University of Tsukuba Lines: 37 Sender: maeda@maedapc.cc.tsukuba.ac.jp Message-ID: References: <040119205150.M0105707@flame.hirata.nuee.nagoya-u.ac.jp> NNTP-Posting-Host: maedapc.cc.tsukuba.ac.jp Mime-Version: 1.0 (generated by SEMI 1.14.3 - "Ushinoya") Content-Type: text/plain; charset=ISO-2022-JP X-Trace: hagi.cc.tsukuba.ac.jp 1074582286 23682 130.158.72.55 (20 Jan 2004 07:04:46 GMT) X-Complaints-To: news@hagi.cc.tsukuba.ac.jp NNTP-Posting-Date: Tue, 20 Jan 2004 07:04:46 +0000 (UTC) User-Agent: Nana-gnus/6.13.12 SEMI/1.14.3 (Ushinoya) FLIM/1.14.4 (=?ISO-8859-4?Q?Kashiharajing=FE-mae?=) APEL/10.3 Emacs/20.7 (i386-vine-linux-gnu) MULE/4.1 (AOI) Cache-Post-Path: maedapc.cc.tsukuba.ac.jp!maeda@localhost X-Cache: nntpcache 2.4.0b5 (see http://www.nntpcache.org/) Xref: ccsf.homeunix.org fj.comp.lang.c:209 yas@is.tsukuba.ac.jp (Yasushi Shinjo) writes: > > a[10] という配列の場合, アドレスとしては a+0〜a+10 が, データとし > > ては a[0]〜a[9] が有効であり, それ以外のアクセスについては > > undefined behavior となっています. 従って > > 現実的には: > > bus error はないかもしれませんが segmentation fault はありえます. > > そうですか。私は、segmentation fault も、あり得ないと思いま > す。どういう仕組みで segmentation fault が起きるのか、説明し > てもらえませんか。 もしかして用語の行き違いがあるんじゃないでしょうか。 小野さんがおっしゃってる「アドレスとして有効」というのは、「ポインタと して有効な(たとえば、比較して正しい結果となる)値である」ということでしょ う。「アドレス空間がマップされている」というOS的な意味ではなくて。 つまり、 ・オブジェクトへのポインタ ・関数へのポインタ ・nullポインタ ・配列の最後の要素の「すぐ次」を指すポインタ のいずれかです。nullポインタや配列の最後+1番めへのポインタは、「ポインタ として有効」ですが、dereferenceしてはいけませんよね。 規格が想定しているのはたとえば、リニアでない(セグメント方式の)アドレス 空間を持つマシンです。 任意のポインタ同士では、アドレスが全順序でない ので、比較がうまくいかなかったりします。 でも、配列の先頭から配列の最後の要素の「すぐ次」のアドレスまでは比較が できないと困るので、その範囲は全順序を保証するように処理系を作りなさい、 ということです。で、もちろん「最後のすぐ次」を読み書きできるようにする 必要はないわけですけど。 http://www.lysator.liu.se/c/rat/c3.html#3-3-6 http://www.lysator.liu.se/c/rat/c2.html#3-2-2-3 前田敦司