-1
以下代碼會發生運行時錯誤,這可能非常容易。 你會糾正它嗎?使用列表STL測試期間的複製構造函數錯誤
該代碼是用於測試列表的STL庫。
問題看起來,它從所述兩個功能,這是測試::測試(常量測試&噸)
和測試&測試::運算=(const的試驗&米)的莖。
我想運行它沒有錯誤。
如果您完全知道問題出現的原因,請告訴我原因。
//頭
class Test
{
public:
int t;
char *name;
public:
Test() {
t = 1;
name = new char [strlen("test")+1];
strcpy(name, "ssss");
}
Test (int i) {
t = i;
}
Test(const Test& t);
~Test()
{
delete [] name;
}
Test& operator= (const Test& m);
char * get_name();
};
//執行
Test::Test(const Test& t)
{
this->t = t.t;
this->name = new char[strlen(t.name)+1];
strcpy(this->name, t.name);
}
Test& Test::operator= (const Test& m)
{
if(this == &m) return *this;
if(this->name != NULL) delete[] name;
name = new char[strlen(m.name)+1];
strcpy(this->name, m.name);
this->t = m.t;
return *this;
}
char * Test::get_name()
{
return name;
}
//主要功能
int main(int argc, const char * argv[])
{
Test a;
Test b(3);
Test c(4);
list <Test> t_list;
t_list.push_back(a);
t_list.push_back(b);
t_list.push_back(c);
list <Test>::iterator iter_begin = t_list.begin();
list <Test>::iterator iter_end = t_list.end();
for(; iter_begin != iter_end; iter_begin++)
{
printf("%d\n", iter_begin->t);
printf("%s\n", iter_begin->get_name());
}
list <Test> t_list2;
t_list2.push_back(c);
t_list2.push_back(b);
t_list2.push_back(a);
iter_begin = t_list2.begin();
iter_end = t_list2.end();
for(; iter_begin != iter_end; iter_begin++)
{
printf("%d\n", iter_begin->t);
printf("%s\n", iter_begin->get_name());
}
}
什麼是錯誤? – Ares 2013-03-02 05:19:28
更正將使用'std :: string'。看到我的答案。 – juanchopanza 2013-03-02 06:52:11