C中“野指针”的含义是什么?

任何人都可以告诉我,在C中的野指针的含义,如何获得它,这是可用的C + +?


该标准没有定义或使用术语“野生”。 我会小心地“纠正”其他人对它意味着什么的意见,我特别要避免引用随机的非规范互联网垃圾来支持我的立场。

对我来说,这意味着一个既不指向合法对象也不指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中有各种各样的方法来获取一个无效的指针值。我最喜欢的是那些试图通过将他们的地址写入文件来“保存”他的对象的人。 奇怪的是,当他在程序的另一个运行过程中读回这些指针值时,他们没有再指向他的对象。 花哨,那个。

但这就是野生对我来说意味着什么。 由于这不是一个规范术语,它意味着无论发言或写作它的人意味着什么。 问他或她。


C中的一个野指针是一个指针,它在第一次使用之前还没有被初始化。 维基百科:

Wild指针通过在第一次使用之前省略必要的初始化来创建。 因此,严格来说,不强制初始化的编程语言中的每个指针都以野指针开始。

这通常是由于跳过初始化而发生的,而不是忽略它。 大多数编译器都能够对此提出警告。

例如

int f(int i)
{
    char* dp;    //dp is a 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;
链接地址: http://www.djcxy.com/p/43881.html

上一篇: What is the meaning of "wild pointer" in C?

下一篇: Seg Fault when initializing array