僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
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や内容が変った場合はあしからず。