質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

780閲覧

runtime errorがでます。3つのstringを含むvectorから、共通の最長のstringを取得したいです。

alizona

総合スコア126

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/07/05 05:55

なぜRuntime Errorが出るのでしょうか?

作りたい機能 

文字列の配列の中で最も長い共通のプレフィックス文字列を見つける関数を記述します。
共通のプレフィックスがない場合は、空の文字列 ""を返します。


["flower","flow","flight"]
Output "fl"  ← この場合は成功してます。

エラーの出る時の、別のinput
[]
runtime error 詳細は一番下にあります。

C++

1class Solution { 2 3public: 4 string longestCommonPrefix(vector<string>& strs) { 5 6 7 //--------------全てのvectorの要素にあるcharをvectorにpushして保存する---------------- 8 int pos; 9 bool found; 10 vector<int>ans; 11 12 int size=strs[0].size(); 13 string base=strs[0]; 14 15 int vec_size=strs.size(); 16 17 string empty=" "; 18 if(vec_size==0){ 19 return empty; 20 } 21 22 //flower 23 for(int j=0;j<base.length();j++){ 24 25 found=true; 26 //1 2 27 for(int i=1;i<vec_size;i++){ 28 29 pos=strs[i].find(base[j]); 30 31 if(pos==string::npos) 32 found=false; 33 } 34 if(found) 35 ans.push_back(j); 36 } 37 38 39 //----------------------ansをチェックして要素の場所を数字で保管------------------------------ 40 int tmp=0; 41 int count=0; 42 43 int a_size=ans.size(); 44 45 int begin=-1; 46 int t_begin=-1; 47 48 49 for(int i=0;i<a_size-1;i++){ 50 51 if(ans[i]+1==ans[i+1]){ 52 53 if(begin==-1){ 54 55 begin=i; 56 } 57 count++; 58 } 59 //連番だけど最後 //連番でない 60 if((ans[i]+1==ans[i+1] && i+1==a_size-1) || (ans[i]+1!=ans[i+1])){ 61 //連番でないから過去の連続ちが過去のレコードより大きい時はを代入 62 63 if(tmp<count){ //tmpは0で自動的に初期化される 64 tmp=count; 65 66 t_begin=begin; 67 } 68 count=0; 69 begin=-1; 70 } 71 } 72 73 74 //------------保管した数字を文字列に変更しreturn------------------------------- 75 string value=""; 76 if(tmp!=0){//tmpが1でも2つ以上のペアがあったことを表す 77 for(int i=0;i<=tmp;i++){ 78 value+=base[t_begin]; //スタートと、終わりと、文字数を保存してて、後ろ2つは被って入る 79 t_begin++; 80 } 81 } 82 if(ans.size()==1){ 83 value+=ans[0]; 84 } 85 return value; 86 } 87};

エラー

C++

1Line 924: Char 9: runtime error: reference binding to null pointer of type 'std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >' (stl_vector.h) 2SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_vector.h:933:9

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

エラーの出る時の、別のinput

[]

strsが空なのにint size = strs[0].size();strs[0]にアクセスしています。

投稿2020/07/05 07:37

SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

alizona

2020/07/05 09:07

ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問