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
。通过使用适当的容器,可以避免大量代码和许多潜在问题,如内存泄漏、原始代码可能发生的双重删除。