首頁  >  文章  >  後端開發  >  刪除原始指標後,C 中複製的指標會發生什麼?

刪除原始指標後,C 中複製的指標會發生什麼?

DDD
DDD原創
2024-11-01 15:13:02279瀏覽

What Happens to Copied Pointers in C   After the Original is Deleted?

刪除後C 中的指標

考慮C 中的以下程式碼片段:

<code class="cpp">A* a = new A();
A* b = a;
delete a;
A* c = a; // Undefined behavior in C++11
A* d = b; // Potentially legal, but uncertain</code>
在 C 11 中,存取已刪除的指標的值會導致未定義的行為。這適用於指標 a 和 b。將 a 的值複製到 c 中也是未定義的,因為 a 指向已釋放的記憶體。

但是,在 C 14 中,該行為變成實現定義的。此標準指定:

「透過無效指標值進行間接存取以及將無效指標值傳遞給釋放函數具有未定義的行為。無效指標值的任何其他使用都具有實現定義的行為。」
因此,在C 14 中,存取b 的值(a 的副本)也是實作定義的。它可能會導致未定義的行為,但也可能透過特定的實現以不同的方式處理。

總之,A* c = a;且 A* d = b;在 C 11 中未定義,在 C 14 中實現定義。這是因為指標 a 和 b 在刪除操作後都指向無效記憶體。

以上是刪除原始指標後,C 中複製的指標會發生什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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