簡體   English   中英

C++ 無法刪除二維數組的第二維

[英]C++ can't delete the second dimension of a 2D array

我正在嘗試創建一個指針數組,每個指針都是一個只有 1 個 integer 的數組。 然后我想打印這個 integer 並且在我打印它之后,我想刪除這個指針,這樣它就不能再打印了。 問題是這個命令“delete[] id_number[i];” 似乎不起作用。

The code:


using namespace std;

int main()
{
    int** id_number= new int* [12];
    for (int i = 0; i < 12; i++)
    {
        id_number[i] = new int[1];
        id_number[i][0] = i;
    }

    for (int i = 0; i < 12; i++)
    {
        cout << "id_number ["<< i << "] [0] = "<< id_number[i][0] << endl;

        delete[] id_number[i];        //Trying to delete each pointer after printing the 
                                        //integer         
    }

    cout << endl << "After the end of loop" << endl;
    cout << "id_number [" << 5 << "] [0] = " << id_number[5][0] << endl;

    return 0;


The outcome:


id_number [0] [0] = 0
id_number [1] [0] = 1
id_number [2] [0] = 2
id_number [3] [0] = 3
id_number [4] [0] = 4
id_number [5] [0] = 5
id_number [6] [0] = 6
id_number [7] [0] = 7
id_number [8] [0] = 8
id_number [9] [0] = 9
id_number [10] [0] = 10
id_number [11] [0] = 11

After the end of loop
id_number [5] [0] = 5     // why does this print work? didn't i delete the pointer "id_number 
                            // [5]" inside the loop??

刪除條目后

delete[] id_number[i]

將剛剛刪除的指針設置為這樣的 nullptr

delete[] id_number[i]; id_number[i] = nullptr;

刪除數組中的所有指針后,您仍然擁有占用資源的數組。 因此它也必須刪除

delete[] id_number; id_number = nullptr;

這應該正確釋放所有資源。 如果您然后如 WhozCraig 所述嘗試非法訪問已刪除的資源,則會發生不安全行為,而我看起來確實應該這樣做,正如 WhozCraig 再次提到的那樣,只是不安全行為。

暫無
暫無

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

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