[英]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
或類似名稱。 最好的選擇是在代碼中進行錯誤檢查。 聽起來您沒有,或者您不會在這里。 前提條件和后置條件很好,從長遠來看(如現在)將為您節省大量時間。但是,作為一線希望,您應該利用它來為將來的組織制定更好的編碼標准。
指針變量的內容可以是:空指針,指向對象的有效指針,指向數組元素或數組的最后一個元素的有效指針或某些無效的指針。
如果它是無效的指針,則任何使用它的嘗試都會調用未定義的行為。 這包括任何檢查它是否為無效指針的嘗試。 而且你被困住了。 您所要做的就是檢查它是否為空指針,或者是否等於其他有效指針。
您應該遵循Objective-C的哲學:嘗試使用無效的指針是編程錯誤。 您不要嘗試在運行時檢測和處理此問題。 您讓它崩潰並修復代碼中的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.