次のコードでは、c ++で2D配列を作成しようとしていますが、このプログラムを実行すると失敗します。
#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;
}
関数getate_options()のoptionLineへのメモリの割り当てに問題があることを理解しています。このようにgettain_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();
}
私の質問は、gettain_options()を変更しない場合、2D配列optionLineを適切な方法で削除するにはどうすればよいかということです。