在下面的代码中,我尝试用 c++ 构建一个二维数组,但是当我运行这个程序时它失败了。
#include <iostream>
#include <vector>
using namespace std;
int obtain_options( char ** optionLine)
{
vector< char*> options;
options.push_back("abc");
options.push_back("def");
std::copy(options.begin(), options.end(), const_cast< char**>(optionLine));
return options.size();
}
int main(int ac, char* av[])
{
char** optionLine;
int len;
optionLine = new char* [2];
for (int i= 0; i<2; i++)
{
optionLine[i] = new char [200];
}
obtain_options(optionLine);
for (int i=0; i<2; i++)
{
cout<<optionLine[i]<<endl;
}
for (int i=0; i<2; i++)
delete [] (optionLine[i]);
delete []optionLine;
return 0;
}
我了解在函数 gain_options() 中为 optionLine 分配内存存在一些问题,如果我以这种方式更改 gain_options(),它将起作用:
int obtain_options( char ** optionLine)
{
vector< char*> options;
char *t1 = new char [100];
t1[0] = 'a';
t1[1] = 'b';
t1[2] = 'c';
t1[3] = '/0';
options.push_back(t1);
char *t2 = new char [100];
t2[0] = 'd';
t2[1] = 'e';
t2[2] = 'f';
t2[3] = '/0';
options.push_back(t2);
std::copy(options.begin(), options.end(), const_cast< char**>(optionLine));
return options.size();
}
我的问题是,如果我不更改 get_options(),我怎么能以正确的方式删除 2D 数组 optionLine。