嗯,我有一個類應該是二次多項式的容器(這是一個模板,我在那裏使用了浮點數,但這應該不重要)。我使用動態數組創建它,並且我應該重載+和 - 操作符...不是問題,呃?那麼,直到我真正運行它,它似乎都很好,很棒。當調整大小時數組「破」
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