在下面的代碼中,我嘗試使用C++構建2D數組,但是當我運行此程序時,它失敗。爲什麼要以這種方式刪除二維數組失敗(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;
}
我知道有一些問題,在功能obtain_options()分配內存optionLine,如果我改變obtain_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();
}
我的問題是,如果我不改變obtain_options(),我怎麼能以適當的方式刪除二維數組optionLine。
對不起,也許我錯過了一些東西。你在哪裏調用obtain_options? – yuklai
正在使用'obtain_options'在哪裏? – Alex
你的目標是什麼?我最好的建議是簡單地拋棄所有'char *'和'new',並使用'std :: string'。一切都應該「只是工作」。 – Chad