以下代码出现运行时错误,这可能非常简单。 你能纠正它吗?
该代码用于测试带有列表的STL库。
问题看起来源于两个函数,即Test :: Test(const Test& t)
和测试& Test :: operator =(const Test& m)。
我想在没有错误的情况下运行它。
如果您确切知道问题发生的原因,请告诉我原因。
// header
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());
}
}
答案 0 :(得分:2)
您的Test(int)
构造函数未初始化name
。这会导致所有其他问题。 (快速运行valgrind
就会告诉你。)