以下代码会发生运行时错误,这可能非常容易。你会纠正它吗?
该代码用于使用列表测试 STL 库。
问题看起来源于两个函数 Test::Test(const Test& t)
和 Test& Test::operator= (const Test& m)。
我只想运行它而不会出错。
如果您确切知道问题发生的原因,请告诉我原因。
// 标题
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());
}
}