gdbでsegmentation faultをした場所を特定する

f:id:peroon:20191127020740p:plain

環境

動機

  • segmentation faultしたとき、位置が分からなかった
  • gdbを使ってみよう

やったこと

  • sudo apt get gdb
  • gdb ./a.out
  • テストケース(テキストファイル)を入力したいので以下のようにした
run params ... < testcase1.txt
Program received signal SIGSEGV, Segmentation fault.
0x000000000800a67b in main () at answer_aizu_2709_20191127.cpp:174
174             if(dp[next]==inf){
  • めでたしめでたし

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

プログラミングコンテストチャレンジブック [第2版] ?問題解決のアルゴリズム活用力とコーディングテクニックを鍛える?

at()で防御力高く

  • vectorを使っているならA[123]とせず、A.at(123)とすることでsegmentation faultが発生したら教えてくれる

追記

  • 特定できない時もあった
  • 大抵配列アクセスなので、怪しい箇所をA[123]ではなくA.at(123)のように書き換えていったほうがすぐ見つかりそう