C++ 这个类有问题吗';构造函数/析构函数?

C++ 这个类有问题吗';构造函数/析构函数?,c++,class,constructor,destructor,C++,Class,Constructor,Destructor,我在一个更大的函数中使用这个类,这个函数没有正确终止 我不得不一次一块地对算法进行注释,以缩小问题的起点 整个过程就像编写的一样工作,但最终以错误终止,并终止调用它的main() 无论如何,当我实例化这个类时,问题就开始了。我假设这一定是析构函数的问题,当对象超出范围时会导致错误 下面是类定义以及构造函数/析构函数: class Entry { private: int act_count; //number of activities for generating ar

我在一个更大的函数中使用这个类,这个函数没有正确终止

我不得不一次一块地对算法进行注释,以缩小问题的起点

整个过程就像编写的一样工作,但最终以错误终止,并终止调用它的
main()

无论如何,当我实例化这个类时,问题就开始了。我假设这一定是析构函数的问题,当对象超出范围时会导致错误

下面是类定义以及构造函数/析构函数:

class Entry
{
    private:
        int act_count; //number of activities for generating array MUST BE DETERMINED BEFORE INSTANTIATION
        int ex_count; //number of expenditures for generating array

    public:
        Entry(int, int); // constructor
        ~Entry(); // destructor
        string date; // functions like a title
        Activity * act_arr; // pointer to an array of activities
        Expenditure * ex_arr; // pointer to an array of expenditures 
        // list of member functions
};

struct Activity
{
    public:
        string a_name;
        float time;
};

struct Expenditure
{
    public:
        string e_name;
        float price;
};
Entry::~Entry()
{
    // prevents memory leaks when object falls out of scope and is destroyed
    delete act_arr;
    delete ex_arr;
}
建造商:

Entry::Entry(int a_count, int e_count)
{
    // initialization of basic members
    date = day_o_year();
    act_count = a_count;
    ex_count = e_count;

    // allocation of array space
    act_arr = new Activity[act_count];
    ex_arr = new Expenditure[ex_count];
}
析构函数:

class Entry
{
    private:
        int act_count; //number of activities for generating array MUST BE DETERMINED BEFORE INSTANTIATION
        int ex_count; //number of expenditures for generating array

    public:
        Entry(int, int); // constructor
        ~Entry(); // destructor
        string date; // functions like a title
        Activity * act_arr; // pointer to an array of activities
        Expenditure * ex_arr; // pointer to an array of expenditures 
        // list of member functions
};

struct Activity
{
    public:
        string a_name;
        float time;
};

struct Expenditure
{
    public:
        string e_name;
        float price;
};
Entry::~Entry()
{
    // prevents memory leaks when object falls out of scope and is destroyed
    delete act_arr;
    delete ex_arr;
}
这里有什么惊人的错误吗?我希望这不是太多的代码来激起一些兴趣


提前感谢。

对于初学者,我认为您需要此(阵列):

但除此之外,你所说的“没有正确终止”到底是什么意思

问:您是否有堆栈跟踪/核心转储

问:您是否使用调试器逐步完成了代码


问:您是否有特定的错误消息可以复制/粘贴到您的帖子中?

我的意思是,
Entry
,调用它的函数按照我的意愿工作。它生成数组,将数据放入数组,将数组内容写入文件等。但当函数终止时,它会使
main()
崩溃,这是1)我需要查找这些概念是什么2)我不知道如何使用调试器3)唯一的错误消息是“(退出代码-1)”。我使用Eclipse。找不到各种退出代码的含义目录。我将尽力了解您提到的概念,并查找有关如何正确使用
删除
的说明。多谢各位much@MagicGAT1.如果我理解正确,您的函数不是
main()
的一部分,它只是从
main()
调用的。2.当函数正常工作并在返回时崩溃时,可能的原因是堆栈被覆盖。调查函数中可能存在的溢出缓冲区。很高兴它成功了!这里有一个关于EclipseCDT调试器的简短教程(听起来您可能正在使用它):。我猜你已经注意到了
delete[]
上的链接:这是否回答了你的问题?我现在正在读这篇文章,谢谢你的链接。这不在推荐帖子列表中。如果你使用智能指针而不是原始指针,你也应该阅读:以及其中包含的链接。@Richard Criten为今晚的阅读添加了书签。非常感谢。比智能指针更好、比原始手动分配更好的是使用
std::vector
。通过使用适当的容器,可以避免大量代码和许多潜在问题,如内存泄漏、原始代码可能发生的双重删除。