我正在从字符串向量创建一个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
。
如何防止这种情况发生?
答案 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?