[英]Why is Dr Memory reporting freed memory errors when I haven't freed any memory?
[英]Why is my class performing arithmetic when I haven't coded any?
我正在做一个家庭作业项目,该项目应该向我们介绍课程。 我才刚刚开始,但是由于某种原因,我的成员变量正确显示直到结束。 它应该只是在函数之间传递这些变量,然后输出它们。 它需要一个由参数化构造函数设置的分子和分母,并用它们设置一个对象,然后输出分子和分母所保存的内容。 它使用分子并将其设置为零,即使该分子先前在类运行的每个函数中显示了正确的数字也是如此。 分母更加奇怪,因为它以某种方式变成了很多数字。 我只是想了解由于我是新手而发生的事情,以及为什么对我而言并不那么明显的原因。
#include <iostream>
using std::cout;
using std::endl;
using std::ostream;
class RationalNum
{
public:
RationalNum();
RationalNum(int numer, int denom);
int getNumerator() const { return numer; }
int getDenominator() const { return denom; }
void setNumerator(int);
void setDenominator(int);
void set(int& numer, int& denom);
void output(ostream& outs);
private:
int denom;
int numer;
};
RationalNum::RationalNum() : numer(1), denom(1)
{}
RationalNum::RationalNum(int numer, int denom) //takes two integers for numer and denom, and reduces
{
cout << "The numer and denom in the param const are " << numer << denom << endl;
set(numer, denom);
}
void RationalNum::set(int& numer, int& denom) //use other functions to take two params and set as numer and denom
{
cout << "The numer and denom in set are " << numer << denom << endl;
setNumerator(numer);
setDenominator(denom);
}
void RationalNum::setNumerator(int numer) //takes an int, sets it as numer, and reduces it
{
cout << "in setNumer, the numer is: " << numer << endl;
//reduce(newNumer); //Not using yet
}
void RationalNum::setDenominator(int denom) //takes an int, sets it as denom, and reduces it
{
cout << "in setDenom, the denom is: " << denom << endl;
//reduce(newDenom); //Not using yet
}
void RationalNum::output(ostream& outs) //takes an ostream param
{
cout << numer << "/" << denom << endl;
}
int main()
{
RationalNum rn1, rn2(25, 10), rn3(24, -100);
cout << "rn1 contains: ";
rn1.output(cout);
cout << endl;
cout << "rn2 contains: ";
rn2.output(cout);
cout << endl;
cout << "rn3 contains: ";
rn3.output(cout);
}
这就是实际结果。 直到最后两行都是正确的,那是我迷路的地方。 rn2应该显示25/10,而rn3应该显示24 / -100
The numer and denom in the param const are 2510
The numer and denom in set are 2510
in setNumer, the numer is: 25
in setDenom, the denom is: 10
The numer and denom in the param const are 24-100
The numer and denom in set are 24-100
in setNumer, the numer is: 24
in setDenom, the denom is: -100
rn1 contains: 1/1
rn2 contains: 0/4196160
rn3 contains: 0/4197376
setNumerator
和setDenominator
方法没有做任何事情。 出于这个原因,类成员denom
和numer
永不初始化。 因此,它们的值将是不确定的,即可能是垃圾。
要解决此问题,请使用:
void RationalNum::setNumerator(int n)
{
numer = n; // I changed the parameter name to avoid confusion with the member
cout << "in setNumer, the numer is: " << numer << endl;
//reduce(newNumer); //Not using yet
}
对分母使用类似的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.