一个匪夷所思的Visual Studio2010 编程问题。

发布网友

我来回答

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的时候可能会出问题(你没给出析构函数代码)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com