簡體   English   中英

指針-刪除

[英]Pointers - deletion

我兩周前開始自己學習C ++,現在我正在研究指針。 為什么以下代碼無法按預期方式工作,刪除后我在數組中看到了相同的值。 我以為該數組將被刪除,並且指針將指向堆中的某個隨機整數,除非我編寫dArray = NULL。 有人可以詳細說明一下嗎? 我不知道我在做什么錯。 謝謝。

PS:我在Mac上使用Xcode。

碼:

#include <iostream>
using namespace std;


int main() {

    int *dArray = new int[5];

    for(int i=0; i<5; i++) {
        dArray[i] = i*2;
    }

    cout << "Show array:" << endl;
    for(int i=0; i<5; i++) {
        cout << dArray[i] << endl;
    }

    delete [] dArray;

    // show array after deletion
    cout << "After deletion:" << endl;
    for(int i=0; i<5; i++) {
        cout << dArray[i] << endl;
    }

    return 0;
}

輸出:

Show array:
0
2
4
6
8
After deletion:
0
2
4
6
8
Program ended with exit code: 0

delete不會更改指針的值。 這只是意味着指針指向的內容不再合法訪問(給出未定義的行為)。

在很多情況下(例如您的情況),該程序可能看起來像在工作,但是更改了某些內容(例如,添加另一個new ),它將以怪異且難以跟蹤的方式失敗...刪除后將指針設置為0至少會使故障更容易識別。

刪除數組只會將內存返回給運行時,但不會覆蓋它。 您可能不再使用它,並且這樣做會調用未定義的行為。

名稱“ delete ”可能會引起誤解。 它實際上並沒有刪除任何內容-只是重新分配先前分配的內存,並調用其指向的對象的析構函數 (如果存在)。 調用析構函數是deletefree之間的主要區別。

暫無
暫無

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

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