0
嗨,我正在研究C++中的多项式类。到目前为止,一切运作良好。但现在我遇到了一个错误,我只是不能当场:/C++多项式复制构造函数和ostream覆盖导致memeory泄漏?!
polynomial.cpp
// copy-constructor
Polynomial::Polynomial(const Polynomial &p){
size = p.size;
buffer = p.buffer;
poly = new double(buffer);
for (int i = 0; i < size; ++i) poly[i] = p[i];
for (int i = size; i < buffer; ++i) poly[i] = 0;
}
// output stream override | it's a non-member function
ostream& operator<<(ostream& os, const v1::Polynomial& p){
int degree = p.degree();
stringstream ss;
if (degree == 0) ss << '0';
else if (degree > 0){
ss << '(';
for (int i = degree; i >= 0; --i){
ss << p[i];
ss << "x^";
ss << i;
if (i > 0)
ss << " + ";
}
ss << ')' << endl;
}
os << ss.str();
return os;
}
所以这是我如何调用拷贝构造函数:
// note: printing 'a' itself does not cause problems...
v1::Polynomial b(a);
cout << "Polynomial b: " << b << " degree: " << b.degree() << endl;;
堆栈日志从Visual工作室说它在23行(这里:这一行上面的行,我实际上想打印'b'),然后它继续调用一些堆函数等。 运行程序而不进行调试(通过cmd)会导致APPCRASH,“Polynomial b:”是最后显示的东西。
可惜我不知道如何在Visual Studio调试,我用的valgrind在Linux中,我目前还没有设置:/
任何人任何想法?或者你需要额外的信息?
无论如何,提前很多感谢=)
这里分配的内存在哪里?poly = new double(buffer);'实际删除了? _“我不幸不知道如何在Visual Studio中进行调试”_ F5 IIRC。 –
如果崩溃可能存在,您需要提供'degree()'的代码。 –
编写代码的好处是它不需要定制拷贝构造函数。 –