簡體   English   中英

在Heap中創建和使用數組

[英]Creating and using array in Heap

作為我學習的一部分,我們正在學習使用“堆”,並負責編寫一個簡短的數學程序,使用指針來引用和遵循堆。 作為一些個人學習,我試圖通過創建一個並使用二進制搜索來復制它。 但它根本行不通。

這是我的代碼:

#include <iostream>
#include <Windows.h>
using namespace std;

int main()
{

//creating pointers
int* ii = new int;
int* top = new int;
int* bottom = new int;
int* uArray = new int[12];
int* uChoice = new int;

//assigning values in location of pointer
*ii = 5;
*top = 11;
*bottom = 0;

cout<<"Please input a value between 1 and 12 to find in the array: \t";
cin >> *uChoice;

for (int x = 0; x<12; x++) //adding values into the array
{
    uArray[x] = x;
    cout<<x;
    Sleep(1000);//checking loop works
}


while (uArray[*ii] != *uChoice)
{
    if (uArray[*ii] > *uChoice)
    {
        *bottom = *ii;
        *ii = (*top + *bottom)/2;
    }

    else 
    {
        *top = *ii;
        *ii = (*top + *bottom) /2;
    }

    if (*uChoice == *ii)
    {
        break;
    }


}

//clearing pointers.
delete ii;
delete top;
delete bottom;
delete uArray;
ii = 0;
top = 0;
bottom = 0;
uArray = 0;

cout<<uChoice<<" Found at position: \t"<< *ii;
Sleep(10000);
return 0;

}

提前謝謝了。

[編輯:]錯誤發生在while循環中。 發生了一些事情,這意味着它沒有正確搜索數組。 對不起,我沒有澄清這一點。

delete關鍵字釋放指針指向的內存。 所以你不應該在那之后再嘗試使用指針。

此外,當指針指向數組時,您必須使用delete [] uArray語法,否則將無法正確釋放內存。

不確定這是否是“不起作用”的部分,因為你不是更具體。

從技術上講,標准沒有定義“Heap”,但是到目前為止實現它, newFreestore而不是Heap上創建元素。 malloc()Heap上創建元素。

好讀:
GotW#9:內存管理 - 第一部分


當你這樣做時,潛伏着未定義的行為

   int* uArray = new int[12];
   delete uArray; 

你需要:

delete []uArray;

while循環在數組中找不到正確元素的原因與指針的使用無關。 我可以直接給你答案,但你自己找到它會更有用(在你看下面的擾流板之前)。

我建議你嘗試在調試器中運行代碼。 如果您之前沒有使用過調試器,我強烈建議您嘗試一下。 在while循環的開頭設置斷點。 您可能會發現在一張紙上寫下uArray []數組的內容以供參考是有用的。 然后一次一行地執行while循環,注意if語句 - 是否進入if子句或else子句,結果是它是移動* top還是* bottom。 鑒於* uChoice與uArray [* ii]相比的價值,看看會發生什么是有意義的。

這是一個微不足道的錯誤,一旦你發現它就會踢你自己。 但更有用的教訓是如何調試代碼。

(如果沒有調試器,可以通過在while循環中插入幾個cout語句來打印出關鍵變量的值來實現相同的效果。)

這是答案(鼠標懸停看到它):

大於運算符應該小於比較uArray [* ii]和* uChoice的測試。 如果您要搜索的數字小於數組中的值,則表示它位於下半部分,因此您需要將自上而下 ,而不是自下而上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM