我是C++的初学者。我正在尝试实现复制构造函数。我希望我遵循了复制构造函数的正确语法。但是,每当我编译我的代码,它就会完成,没有任何错误,但在运行时,它说“程序完成退出代码10”。我在Clion工作。当我在Mac终端上尝试时,它显示了“总线错误: 10”。
我可以发现复制构造函数是造成这个问题的原因。我试着评论它并运行这个程序,它运行的很好,当我取消评论的时候,上面的问题就产生了。
请帮我找出我哪里出了问题。
谢谢。
这是我的代码:
#include <iostream>
using namespace std;
class Person {
char *name;
int age;
public:
Person ();
Person (char *, int age = 18);
Person (const Person &p);
void output ();
};
Person ::Person() {
name = new char[20]();
age = 0;
}
Person ::Person(char *str, int age) {
name = new char[50]();
strcpy(name, str);
this->age = age;
}
Person ::Person(const Person &p) {
strcpy(name, p.name);
age = p.age;
}
void Person ::output() {
cout << "\nName = " << name;
cout << "\nAge = " << age << endl;
cout <<"-------------------------------------------------------------------------------------------------------------------------\n";
}
int main () {
Person p1;
Person p2("Name");
Person p3 ("Name", 20);
Person p4 = p2;
cout << "\nThe Output of the Object Called by Default Constructor\n\n";
p1.output();
cout << "\nThe Output of the Object Called by Parameterised Constructor with Default Argument\n\n";
p2.output();
cout << "\nThe Output of the Object Called by Parameterised Constructor Overriding Default Argument \n\n";
p3.output();
cout << "\nThe Output of the Object Called by Copy Constructor (Copying p2 Object that is the second output)\n\n";
p4.output();
return 0;
}发布于 2016-10-03 11:33:05
你是派位吗?
Person ::Person(const Person &p) { strcpy(name, p.name); age = p.age; }
在将数据复制到成员name之前,应该为其分配strlen(p.name)+1字节大小的内存。
发布于 2019-12-07 09:48:17
如果我只从你问题的标题回答你的问题,答案将非常简单。
但是首先请阅读如何创建一个最小的、可复制的示例,因为它有助于其他理解和在中的代码。
exit()是一个内建的终止函数,通常用于终止程序.
它使用一个名为Status code的参数。这也表明了两个简单的状态。
EXIT_SUCCESS (宏),则表示success、exit(0)或exit(EXIT_SUCCESS)。EXIT_FAILURE,则表示failure、exit(1)或exit(EXIT_FAILURE)。因此,对于exit(10)或exit(1)的任何其他值,它都表示错误。
要了解有关exit()的更多信息,请参见此处:
现在从您的代码中可以看出,您是
pointers,的新手,所以阅读本文非常好,因为它将为您提供如何正确使用指针以防止out of memory、memory leaks和Segfault错误的指导原则。 C++核心准则:资源管理规则
https://stackoverflow.com/questions/39830152
复制相似问题