使用重载操作符和成员指针时的分段错误
所以我对C++编程还很陌生,在我当前的编程课程中,我们正在学习操作符重载和朋友函数。我们被告知创建一个具有不同类型的构造函数和重载操作符的类Money。当我们没有私人成员变量的指针时,程序变得容易得多,但现在它已经有点过头了。使用重载操作符和成员指针时的分段错误
在继续定义其余的重载操作符函数之前,我想获得一些帮助。基本上我试图做的是将Money类的两个对象一起添加,但是当我运行该程序时,我一直在获取分段错误。我知道这与指针和访问无法访问的内存有关,但我不确定我出错的地方。
这是一个很短的程序,所以代码应该很容易阅读。任何帮助,将不胜感激!
class Money
{
public:
Money(int d=0, int c=0);
Money(const Money&);
// ~Money();
Money& operator=(const Money&);
Money operator+(const Money&) const;
Money operator-(const Money&) const;
Money& operator*(double);
Money& operator/(double);
friend istream& operator>>(istream&, Money&);
friend ostream& operator<<(ostream&, const Money&);
private:
int* dollars;
int* cents;
};
int main()
{
Money m1(3, 43), m2(4, 64);
Money m3 = m1 + m2;
return 0;
}
Money::Money(int d, int c)
{
*dollars = d;
*cents = c;
}
Money Money::operator+(const Money& m1) const
{
Money result;
*result.dollars = *this->dollars + *m1.dollars;
*result.cents = *this->cents + *m1.cents;
return result;
}
你还没有为dollars
和cents
分配的内存。你应该这样做在你的构造:
Money::Money(int d, int c)
{
dollars = new int;
cents = new int;
*dollars = d;
*cents = c;
}
而且不要忘记释放在析构函数的内存:
Money::~Money() {
delete dollars;
delete cents;
}
否则,你只是宣称你有两个指针int
S( dollars
和cents
),但实际上并未确保它们指向内存中的有效点;他们未初始化。
提示:在实现复制构造函数(Money(const Money&)
)和运算符(感谢@LokiAstari进行彻底检查)时,请牢记这一资源管理。
非常感谢。我仍然在学习很多关于指针的知识,我想我完全忽略了这一点。 –
@DaneWind为什么你需要所有简单的'int'变量的指针? – user0042
这个建议会让问题变得更糟。 –
为什么要将美元和美分定义为整数的指针?这是一个坏主意。你尝试使用这些整数(derefence指针),而不实际初始化它们。 – NineBerry
您是否需要使用int *作为美元和美分?如果您的任务允许,请使用plain int。 – Darryl
我需要用美元和美分的int指针。我希望我能!还在学习动态内存分配的来龙去脉。 –