簡體   English   中英

檢查C ++指針是否有效(在Objective-C(++)中)

[英]Checking if an C++ Pointer is valid (in Objective-C(++))

我已經在使用Objective-C ++的iOS項目中改編了Matt Gallagher的“測試任意指針是否是有效的對象指針” 它可以很好地與Objective-C對象配合使用,但是它始終告訴我,無論C ++指針是否有效,它都是無效的。 有時,代碼在指針處崩潰。 有時代碼可以正常工作。 但是測試方法總是告訴我指針是錯誤的。

這里是否有人知道也可以將此代碼適應C ++類和對象? 我可以想象,根據“類”的使用,該代碼僅適用於Objective-C。

C ++指針僅引用內存中的地址。 您可以使用內存查看器工具查看內存中的內容,但這甚至不能保證內存仍然有效。 例如:

char* test = new[13];

strcpy(test, "Hello World!");
delete[] test;
.
.
.
printf("%s", test);

在某些情況下,這將成功打印。 有時它將打印一個垃圾字符串。 有時會出現段錯誤。 沒有什么可以說指針的有效性的。

如果您正在查看的是剛剛出現段錯誤的程序,並且試圖查看發生了什么,則可以使用一些選項:

  • 您可以通過內存查看器查看內存,並結合您所犯的錯誤行可以提供洞察力。
  • 您可以在運行之前播種內存,以使其更清楚地使用0xbadfood5或類似名稱。
  • 如果可以處理開銷,則在運行時使用Valgrind是一個很好的工具。

最好的選擇是在代碼中進行錯誤檢查。 聽起來您沒有,或者您不會在這里。 前提條件和后置條件很好,從長遠來看(如現在)將為您節省大量時間。但是,作為一線希望,您應該利用它來為將來的組織制定更好的編碼標准。

指針變量的內容可以是:空指針,指向對象的有效指針,指向數組元素或數組的最后一個元素的有效指針或某些無效的指針。

如果它是無效的指針,則任何使用它的嘗試都會調用未定義的行為。 這包括任何檢查它是否為無效指針的嘗試。 而且你被困住了。 您所要做的就是檢查它是否為空指針,或者是否等於其他有效指針。

您應該遵循Objective-C的哲學:嘗試使用無效的指針是編程錯誤。 您不要嘗試在運行時檢測和處理此問題。 您讓它崩潰並修復代碼中的錯誤。

暫無
暫無

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

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