嗯,我有一个类应该是二次多项式的容器(这是一个模板,我在那里使用了浮点数,但这应该不重要)。我使用动态数组创建它,并且我应该重载+和 - 操作符...不是问题,呃?那么,直到我真正运行它,它似乎都很好,很棒。当调整大小时数组“破”
listf listf::operator+(listf rhs)
{
listf newlist;
for(int i = 0; i < elementcount; ++i)
newlist.add(array[i]);
for(int j = 0; j < rhs.elementcount; ++j)
newlist.add(rhs.array[j]);
std::cout<<newlist;
return newlist;
}
没什么。应该正确地做好自己的工作吧?该cout只是为了检查它是否工作。但事实并非如此。 应该这样做,对吧? 随着一个列表包括:
X^2+5x+52.4
2X^2+7x-12
和具有第二一个只是X^2 + 2X + 1,它应该做一个列表,并显示:
X^2+5x+52.4
2X^2+7x-12
X^2+2X+1
Buuuut没有,它涉及到这个:
-1.5584e+038X^2-1.5584e+038x-1.5584e+038
-1.5584e+038X^2-1.5584e+038x-1.5584e+038
-1.5584e+038X^2-1.5584e+038x-1.5584e+038
我一直在与它斗争了一段时间,并没有找到它为什么会这样做。
代码添加新的多项式仍然是相当简单:
void listf::add(polynomial<float> plnm)
{
if(array == NULL)
{
++elementcount;
array = new polynomial<float>[elementcount];
array[0] = plnm;
}
else
{
array = resize(array, elementcount+1, elementcount);
array[elementcount++] = plnm;
}
}
和调整在这个类私有函数:
polynomial<float>* listf::resize(polynomial<float>* arr, int newSize, int oldSize)
{
polynomial<float>* newArr = new polynomial<float>[newSize];
for(int i = 0; i < oldSize; ++i)
{
newArr[i] = arr[i];
}
delete[] arr;
return newArr;
}
如果我们正在做的更小的数组(删除对象),我只是把oldSize等于newSize(我知道这是一个糟糕的做法和其他人混淆,但我只是测试的东西:()
我不知道。 bject似乎可行,但是当我想添加两个对象时,它会打印出不正确的元素,然后使用CodeLite报告类似于Call Stack中的“ntdll!LdrVerifyImageMatchesChecksumEx”报告。更好的是,当我现在进行测试时,它显示正确的值,但仍然在返回时崩溃。
只要使用一个'std :: vector>'那么它会照顾到你。 –
Mgetz
你可以发布足够的代码来构建和测试吗?请[阅读本文](http://www.sscce.org/)了解良好示例代码的说明。 –
@ user3556899 - 正如您指出的那样,您正试图用这个动态数组重新发明轮子。 'std :: vector'有'push_back()'将一个项目添加到vector的末尾,'resize()'改变了vector的大小等等。 – PaulMcKenzie