任何人都可以告诉我,在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