我创建一个新的char时抛出std :: bad_alloc **

时间:2013-03-10 20:05:55

标签: vector char

我正在从字符串向量创建一个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

如何防止这种情况发生?

2 个答案:

答案 0 :(得分:0)

那-2绝对不应该存在。另请注意,您只为每个字符数组分配了一个指针数组。您还需要为字符数组本身分配内存。

答案 1 :(得分:0)

我无法肯定地说,但是当您使用负值调用bad_alloc时,您的代码会抛出new。例如,如果您将函数传递给空向量,则实际上是在调用

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

所以你应该在致电new之前检查一下。从逻辑的角度来看,包含-2无论如何都没有意义。我还建议阅读这个问题并回答Why new[-1] generates segfault, while new[-2] throws bad_alloc?