Re: Leak or Crash. Don't understand why
On 6/10/2010 11:10 AM, Luk Jack wrote:
On 6???10???, ??????9???17???, Ulrich Eckhardt<eckha...@satorlaser.com> wrote:
Luk Jack wrote:
On 6???10???, ??????7???09???, Ulrich Eckhardt<eckha...@satorlaser.com> wrote:
1. Wrapping something into a class that only contains functions and no
actual state (which is what your cMath class looks like, though I'm not
sure) is wrong. If you need, use a namespace instead. I guess you have
this habit and probably a few others from Java or similar languages that
force you to use classes for everything.
[...]
Actually, I've got an attribute in my cMath class, so isn't it
stateless, is it? not too sure :)
Yes, that would be a valid reason to put it into a class.
Uli
--
C++ FAQ:http://parashift.com/c++-faq-lite
Sator Laser GmbH
Gesch??ftsf??hrer: Thorsten F??cking, Amtsgericht Hamburg HR B62 932
class cMath
{
public:
cMath() { }
~cMath() { }
double Integrate(const Formula& f);
void Derive(const Formula& f);
Terms *Solve_Term(const Terms& t);
double Power(double x, int p);
// Formula m_vNomralFunctions; // Normal Functions for generating
approx function
const Formula& getFormula() { return m_vFormula; }
private:
Formula m_vFormula;
};
inline void cMath::Derive(const Formula& f)
{
Terms *t1 = new Terms();
for (unsigned int i = 0; i< f.size(); i++)
{
t1 = Solve_Term(f[i]);
If this happens, the previous value of 't1' is lost. Since you allocate
't1' here, you lose *that* memory if you even enter the body of the
loop. And since you allocate something in 'Solve_Term', you are going
to lose *that* memory if your body executes more than once.
Consider switching to pure passing-by-value. Just stop using 'new' and
'delete' altogether.
m_vFormula.push_back(*t1);
}
delete t1;
}
inline Terms *cMath::Solve_Term(const Terms& t)
{
Terms *t1 = new Terms();
t1->coefficient = t.coefficient;
t1->degree = t.degree-1;
t1->coefficient = t1->coefficient*t.degree;
if (t1->degree< 0)
t1->coefficient = 0;
//delete t1;
return t1;
}
V
--
I do not respond to top-posted replies, please don't ask