0

文字列のベクトルからc文字列の配列を作成しています。結果の配列がベクトルの最初の要素をスキップするようにします。これに使用している関数は次のとおりです。

char** vectortoarray(vector<string> &thestrings)
{
  //create a dynamic array of c strings
  char** temp = new char*[thestrings.size()-2];

  for(int i = 1; i < thestrings.size(); i++)
    temp[i-1] = (char*)thestrings[i].c_str();

  return temp;
}

小さなプログラムでエラーなしでテストしたので、このコードが機能することはわかっています。ただし、わずかに大きいプログラム内で実行すると、エラーが発生しますterminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc

これを防ぐにはどうすればよいですか?

4

2 に答える 2

0

その-2は間違いなくそこにあるべきではありません。また、各文字配列にポインタの配列のみを割り当てていることにも注意してください。また、文字配列自体にメモリを割り当てる必要があります。

于 2013-03-10T20:14:49.053 に答える
0

はっきりとは言えませんが、負の値でbad_alloc呼び出すと、コードがをスローする可能性があります。newたとえば、関数に空のベクトルを渡すと、効果的に呼び出します。

char** temp = new char*[-2];

したがって、を呼び出す前にこれを確認する必要がありますnew。論理的な観点からは、この包含は-2とにかくほとんど意味がありません。また、この質問と回答を読んで、 new [-1]がsegfaultを生成し、new[-2]がbad_allocをスローする理由をお勧めします。

于 2013-03-10T20:15:14.947 に答える