小野@名古屋大学 です.

<YAS.04Jan19203607@kirk.is.tsukuba.ac.jp>の記事において
yas@is.tsukuba.ac.jpさんは書きました。
yas> > char src[10] = "abc";
yas> > char dst[100];
yas> > size_t n = sizeof(dst);
yas> > memcpy(dst, src, n);
yas> > という場合 memcpy は src[10] 以降にもアクセスするので bus
yas> > error になる場合もある?ってことじゃないでしょうか。
yas> char src[10]; のような配列の場合、未定義でアクセスしても、そ
yas> れだけでは決して bus error になったりはしません。単に前に使っ
yas> ていたメモリの内容が出てくるだけです。
a[10] という配列の場合, アドレスとしては a+0〜a+10 が, データとし
ては a[0]〜a[9] が有効であり, それ以外のアクセスについては
undefined behavior となっています. 従って
現実的には:
bus error はないかもしれませんが segmentation fault はありえます.
規格上は:
undefined behavior なので, 何が起きても文句は言えません.

yas> こういう auto 変数の初期化って、C言語の規格として、OK なん
yas> ですか。昔はだめだったんだけど。gcc が受付けるのは知っています。
ISO C では全く合法的です.
-- 
名古屋大学大学院 情報科学研究科 計算機数理科学専攻
小野 孝男