我是C++的初學者。我試圖實現複製構造函數。 我希望我遵循了複製構造函數的正確語法。 但是,每當我編譯我的代碼,它將完成沒有任何錯誤,但在運行時它說「程序完成退出代碼10」。 我正在Clion IDE中工作。當我在Mac終端嘗試時,它顯示「總線錯誤:10」程序完成退出碼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;
}
解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –
很可能你的程序在這裏崩潰:'strcpy(name,p.name);'你爲'name'分配的大小不一致。只需使用'char *'的'std :: string' instea即可。 –
感謝這幫了我 – ganag