发布网友
共2个回答
热心网友
不知道你的主函数的代码,但从Polynomial构造函数来看,创建的coe只有一个double的存储空间,而在add中,
void Polynomial::add(const Polynomial& is)
{
Polynomial temp;//在此处,默认构造,sizeCoe为1
temp.numCoe=numCoe>is.numCoe?numCoe:is.numCoe;
temp.sizeCoe=2*temp.numCoe;
for(int i=0;i<temp.numCoe;++i)
temp.coe[i]=0;//其实这里也有问题,实际只有1个数据大小,你只是修改了sizeCoe,并未扩大分配内存
temp.copyFrom(is);//虽然你把sizeCoe加大了,但你并没有重新分配内存,目前coe指向的内存仍是原来分配的1个单元,若is数据多,必溢出
temp.numCoe=numCoe>is.numCoe?numCoe:is.numCoe;
for(int i=0;i<numCoe;++i){
temp.coe[i]+=coe[i];
}
//*this=temp;
numCoe=temp.numCoe;
sizeCoe=temp.sizeCoe;
for(int i=0;i<numCoe;++i)
coe[i]=temp.coe[i];
return;
}
调用了temp.copyFrom,此时temp的coe只有一个double,但却要:
void Polynomial::copyFrom(const Polynomial& is)
{
for(int i=0;i<is.numCoe;++i)
coe[i]=is.coe[i];
numCoe=is.numCoe;
}
把is的所有元素复制....内存越界的典型示例
热心网友
对于add里的temp 构造调用coe=new double[sizeCoe],但之后sizeCoe被修改 在释放temp的时候可能会出问题(你没给出析构函数代码)