首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用退出代码10完成的程序

用退出代码10完成的程序
EN

Stack Overflow用户
提问于 2016-10-03 11:07:20
回答 2查看 5.3K关注 0票数 0

我是C++的初学者。我正在尝试实现复制构造函数。我希望我遵循了复制构造函数的正确语法。但是,每当我编译我的代码,它就会完成,没有任何错误,但在运行时,它说“程序完成退出代码10”。我在Clion工作。当我在Mac终端上尝试时,它显示了“总线错误: 10”。

我可以发现复制构造函数是造成这个问题的原因。我试着评论它并运行这个程序,它运行的很好,当我取消评论的时候,上面的问题就产生了。

请帮我找出我哪里出了问题。

谢谢。

这是我的代码:

代码语言:javascript
复制
    #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;
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-03 11:33:05

你是派位吗?

Person ::Person(const Person &p) { strcpy(name, p.name); age = p.age; }

在将数据复制到成员name之前,应该为其分配strlen(p.name)+1字节大小的内存。

票数 0
EN

Stack Overflow用户

发布于 2019-12-07 09:48:17

如果我只从你问题的标题回答你的问题,答案将非常简单。

但是首先请阅读如何创建一个最小的、可复制的示例,因为它有助于其他理解和在中的代码。

exit()是一个内建的终止函数,通常用于终止程序.

它使用一个名为Status code的参数。这也表明了两个简单的状态。

  1. 如果为0或EXIT_SUCCESS (),则表示success、exit(0)exit(EXIT_SUCCESS)
  2. 如果是EXIT_FAILURE,则表示failure、exit(1)exit(EXIT_FAILURE)

因此,对于exit(10)exit(1)的任何其他值,它都表示错误。

要了解有关exit()的更多信息,请参见此处:

现在从您的代码中可以看出,您是pointers,的新手,所以阅读本文非常好,因为它将为您提供如何正确使用指针以防止out of memorymemory leaksSegfault错误的指导原则。 C++核心准则:资源管理规则

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39830152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档