RE (Runtime Error) どこで落ちたのか分かるコンパイルオプション -fsanitize=undefined

環境

  • C++
  • Mac

普段の動き

  • コードを書いた後
g++ answer.cpp && oj t
  • としてテストケースもチェックしている
  • REになると、どこで発生したかわからない
  • どうする?printf? gdb?

こうすればいい

g++ -g -fsanitize=undefined answer.cpp && oj t
  • オプションを付けただけ
  • REの時に詳しい情報を表示してくれる

f:id:peroon:20190425163932p:plain

  • 2次元配列の添字で落ちていることが分かる
  • 制約でN<=100だったのでdp[100][...]としたが、ギリギリを攻めすぎた
  • dp[110][...]にすると通る

感想

  • REで落ちる時って大抵添字エラーなので、このオプションですぐ分かるのは役立ちそう