トップ «前の日記(2015-02-12(Thu)) 最新 次の日記(2015-02-18(Wed))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2015-02-17(Tue) また右の手袋をなくした次の日は、雨未満

配列の範囲外

gccとclangで。初期化時の範囲外への読み書き。
いずれも警告オプションは最大に。

#include<stdio.h>
int main() {
  int list[3] = {1,2} ,num;
  list[5] = 8;
  for(num = 7; num >= 0; num--)
    printf("%d\n", list[num]);
  return 0;
}

ほぼ予想通りだった。gccはスルーしたが、clangは 文句を言ってきた。
もちろんlist[3]はゼロになり、list[0],[1] 以外は 不定になるはずである。
あと、clangでできた実行形式ファイルをFreeBSDで実行 すると、すぐには終わらなかった。
Ubuntu+GCC, Jessie+clangではいずれも一瞬であったけど。

$ time ./list
537104384
0
8
-1073742552
0
0
2
1
セグメンテーション違反 (コアダンプ)
 
real    0m13.833s
user    0m0.007s
sys     0m0.786s

リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。