回答
你的意思是if (badptr==NULL)
?
請注意,當您定義它或當您「取消分配它」(例如,您刪除它所引用的對象)時,您必須首先將您的指針設置爲NULL。否則,它將包含垃圾,並且此測試將失敗,因爲值不會爲0.
您也可以將比較結果設置爲0而不是NULL,因爲已經有足夠的參數,因此這是正確的形式,所以我贏了不要重複他們。
char *ptr=NULL;
initalize the pointer to NULL
;那麼稍後您可以檢查它是否爲NULL
,以確定它是否有效,然後再嘗試遵守它。
您可以安裝信號處理程序SIGSEGV
,然後嘗試取消引用指針 - 如果你發現自己訊號處理器中,指針不分配(或指向無效的內存地址,這基本上是同樣的事情)
但是,可能存在未分配的指針指向屬於進程內存空間的有效地址的情況 - 在這種情況下,將不會引發SIGSEGV
。
一個downvoter會如此善意解釋downvote?無論出於何種原因,您可能都不喜歡這個答案,但這並沒有錯。 – qrdl 2010-06-07 17:42:16
如果您使用信號處理程序並嘗試解引用指針並將指針指向可用內存外的區域,則會拋出一個僅允許拋出一次的奇怪異常。然後,當您稍後嘗試分配內存時,分配器將查找該異常以查看是否需要增加地址空間並且不會看到它,並且事情不會正常工作。請注意,以前的所有文本都略有偏差,因爲我從一篇文章中相當朦朧的回憶中寫下了這篇文章,這篇文章解釋了爲什麼嘗試通過取消引用驗證內存是一個壞主意。 – Brian 2010-06-07 22:08:30
@Brian你在說什麼異常?問題是關於C而不是C++,C沒有任何例外。我寫了關於信號的信號,不是例外,信號是一個非常不同的東西。我認爲你混淆了兩個完全不同的概念。 – qrdl 2010-06-08 06:59:54
在C++
當int
變量未被賦值時,它們的初始值爲2686392!
您可以使用宏,它不會工作:
#define NP_CHECK(ptr) \
{ \
if (ptr == NULL) { \
fprintf(stderr, "%s:%d NULL POINTER: %s\n", \
__FILE__, __LINE__, #ptr); \
exit(-1); \
} \
} \
- 1. 在C++中爲指針指定指針
- 2. C++指定指向指針
- 3. 在C和C++中,const指針指針指的是什麼?
- 4. 最初是否可以創建C++指針而不是創建變量,然後爲其指定一個指針?
- 5. C++模板類型是否爲指針或不
- 6. 指針vs指針指針C
- 7. C++多態不支持指針指針
- 8. C指針指針問題
- 9. C++矢量指針指針
- 10. C指針指針數組
- 11. Memoryleak指針指針,C++
- 12. 指針值C空指針
- 13. 指針在C#
- 14. 指針在C
- 15. 指針 - 在C++
- 16. 指針在C
- 17. 在C++指針
- 18. 不良指針? - C++
- 19. C指針:* ptr ++或*(ptr +1)
- 20. C++ - 指向數組的指針 - 指針
- 21. 指向C++指針的指針
- 22. 綁定void *指向C++/Cli基本類型指針的指針
- 23. 檢測指針是否指向CUDA中的設備或主機
- 24. 指針在C,整數指針字符指針
- 25. 評估指針的指針是否存在'n'值
- 26. 指向指針數組的指針是?
- 27. 什麼是指向指針的指針?
- 28. 是否使用指針
- 29. C指針,指向全局變量:不同的指針
- 30. 不能返回,並指定字符數組在C指針
注:這是可能的,你會在試圖解決這個問題的過程中,發現一個叫做'IsBadPtr'功能。 **不要使用它!** – Brian 2010-06-03 15:04:00
爲什麼不使用isbadptr? – gkaykck 2010-06-03 15:44:42
閱讀http://blogs.msdn.com/b/oldnewthing/archive/2006/09/27/773741.aspx – Brian 2010-06-08 11:35:25