首頁  >  文章  >  後端開發  >  在 C 中刪除一個引用相同物件的指標後會發生什麼?

在 C 中刪除一個引用相同物件的指標後會發生什麼?

Susan Sarandon
Susan Sarandon原創
2024-11-01 11:29:30758瀏覽

What Happens to Pointers Referencing the Same Object After One is Deleted in C  ?

C 中指向已釋放記憶體的指標

刪除指標後,引用同一物件的其他指標的有效性會出現混亂。本文旨在闡明 C 中的這種行為。

考慮以下程式碼:

<code class="cpp">A* a = new A();
A* b = a;

delete a;

A* c = a; // Illegal (C++11)
A* d = b; // Debatable legality

// Points to deallocated memory, Undefined in C++11
A* aAddr = &a;</code>

C 11 行為:

  • 賦值從先前刪除的指標a 到c 會導致未到c 會導致未到c定義的行為,因為a 現在是無效指標
  • 但是,d 指向刪除先前製作的a 的副本。雖然讀取 b 的值指向已釋放的記憶體位置,但此操作是實作定義的。

C 14 行為:

  • 分配給來自無效指標 a 的 c 和 d 仍然會導致未定義的行為。
  • 複製無效指標的值,正如這裡對 b 所做的那樣,也是實現定義的行為。

根據 C 11 標準,使用無效的指標值(包括複製它)會導致未定義的行為。在 C 14 中,此類操作具有實現定義的行為,這意味著該行為可能會因不同的編譯器和作業系統而異。

因此,在 C 11 和 C 14 中,避免使用已實現的指標至關重要。已刪除或引用已釋放的記憶體。這樣做可能會導致不可預測和潛在錯誤的行為。

以上是在 C 中刪除一個引用相同物件的指標後會發生什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn