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 回答