任何人都可以告訴我,在C中的野指針的含義,如何獲得它,這是可用的C + +?C中「wild pointer」的含義是什麼?
回答
這是一個指向未初始化的對象或有狀態不好的對象。使用這個指針會造成麻煩。維基是一個很好的解釋來源。
這不是標準術語。它通常用於指向指向無效內存位置的指針。 int *p; *p = 0; //P is a wild pointer
或者
int *p = NULL;
{
int a;
p = &a; // as soon as 'a' goes out of scope,'p' is pointing to invalid location
}
*p = 0;
當指針指向的位置超出作用域(或被釋放)時,它將成爲懸掛指針,而不是通配符。野指針是一個沒有初始化的指針。 – Technowise 2010-04-06 10:06:28
@Technowise:我不同意。我聽說這兩個術語可以互換使用。 – sbi 2010-04-06 12:02:21
野生指針在C是尚未之前其首次使用初始化的指針。 從Wikipedia:
野生指針通過省略 必要的初始化之前 第一次使用創建的。因此,嚴格來說, 編程語言 中的每一個不強制執行初始化的指針 都以野指針開始。
這最常發生是因爲在初始化時跳過 ,而不是由 省略它。大多數編譯器能夠 警告這一點。
如
int f(int i)
{
char* dp; //dp is a wild pointer
...
}
該術語也用於_had_已初始化的指針,但現在已變成wildiesis的指針。見Naveen的答案:http://stackoverflow.com/questions/2583656/2583678#2583678 – sbi 2010-04-06 09:08:30
@Magnus - 感謝編輯! @sbi - 我通常聽到你所描述的狀態被稱爲「搖晃的指針」的狀態指針,但是你是正確的,它們有效地處於與「野指針」相同的狀態。 – 2010-04-06 15:26:31
不完全相同 - 在許多帶有動態內存的系統中,懸掛指針指向的數據在重用之前似乎是有效的,而通常會指向垃圾。 – 2010-06-23 09:08:40
未用任何地址初始化的指針被稱爲野指針。它可以包含任何垃圾地址,所以解引用野指針是很危險的
它沒有定位任何數據類型varable即varable是叫野指針
標準沒有定義或使用術語一個ponter「野」。我會小心地「糾正」其他人對它意味着什麼的意見,我特別要避免引用隨機的非規範互聯網垃圾來支持我的立場。
對我來說,這意味着一個既不指向合法對象也不指NULL的指針。這些類型的指針值的可能來源可能包括未初始化的指針對象,已經不存在的對象,計算的指針值,不正確的對齊指針值,指針本身的意外損壞或指向的內容等。
int main(void)
{
int *p; // uninitialized and non-static; value undefined
{
int i1;
p = &i1; // valid
} // i1 no longer exists; p now invalid
p = (int*)0xABCDEF01; // very likely not the address of a real object
{
int i2;
p = (int*)(((char*)&i2) + 1); // p very likely to not be aligned for int access
}
{
char *oops = (char*)&p;
oops[0] = 'f'; oops[1] = 35; // p was clobbered
}
}
等,等等。在C中有各種各樣的方法來獲取一個無效的指針值。我最喜歡的是那些試圖通過將他們的地址寫入文件來「保存」他的對象的人。奇怪的是,當他在程序的另一個運行過程中讀回這些指針值時,他們沒有再指向他的對象。花哨,那個。
但這正是野生對我意味着什麼。由於這不是一個規範術語,它意味着無論發言或寫作它的人意味着什麼。問他或她。
+1表示該術語不精確,給出4個可能的原因。 – 2010-04-06 12:01:48
野指針是指使用的任何指針(特別是作爲L_value {即(*指針)= x}),但其值不正確或不再正確。它也可以用來描述沒有將指針定義爲指針的存儲器的使用(可能通過遵循野指針或使用過時的結構定義)。
沒有官方的定義。這只是我們在提及某些指針錯誤或錯誤結果時使用的單詞。
野指針是一個不指向有效對象(指定類型,如果適用)的指針,或指向可區分的空值(如果適用)。
瞭解更多關於Wild Pointer這裏
未初始化的指針稱爲野指針。 假設如果你嘗試
int * p; //指向任何隨機或未知的位置。 * p = 16;/一些未知的內存位置正在損壞。這不應該完成。/
這會對您的程序造成很大的威脅。 B'Coz,因爲它們指向一些任意的內存位置,並且更改該位置的內容可能會導致程序崩潰或表現不佳。
這不會添加任何現有答案不具有的新內容。 – GManNickG 2013-07-26 08:27:20
- 1. C#中「@」的含義是什麼
- 2. C++中[=](...){...}的含義是什麼?
- 3. :: C++中的含義是什麼?
- 4. 「var」在C#中的含義是什麼?
- 5. C#中'this'的含義是什麼?
- 6. C#中「=>」的含義是什麼?
- 7. C++宏中「##」的含義是什麼?
- 8. 「System.IO」在C#中的含義是什麼?
- 9. C++中NULL!= value的含義是什麼?
- 10. C中'=='的含義是什麼?
- 11. PLAT_BINARYFORMATTER在C#中的含義是什麼?
- 12. (char pointer和int added)和循環是什麼?什麼是c?
- 13. {$ C PRELOAD}指令的含義是什麼?
- 14. =的含義是什麼?在目標c
- 15. if(';')的含義是什麼?
- 16. 這是' - >'在c/objective-c中的含義是什麼?
- 17. 什麼是C「INT常量*」的確切含義是什麼?
- 18. 是什麼(int_1 + = * pointer ++ = int_2 ++)<int_3是什麼意思?
- 19. 「error_subcode」的含義是什麼
- 20. SootMethod.getSubSignature()的含義是什麼?
- 21. URL的含義是什麼
- 22. configureDefaultServletHandling的含義是什麼?
- 23. 這個類定義在C#中的含義是什麼?
- 24. DTMobileIS的含義是什麼?
- 25. ui.draggable.draggable的含義是什麼?
- 26. android:backgroundDimAmount的含義是什麼?
- 27. 什麼是java.io.tmp的含義
- 28. !int_variable--?的含義是什麼!
- 29. 什麼是WindowsIdentity的含義
- 30. CronJobs的含義是什麼?
野生指針喜歡垃圾的地方。 – Tom 2010-04-06 13:01:30
爲什麼選擇社區Wiki? – kennytm 2010-04-08 06:30:15
那不是野生的,它很生氣...... – AnthonyLambert 2010-04-26 09:01:20