“是什么意思?”;“野生指针”;在C中? 可以告诉我,C中的野生指针的含义,如何获取它,C++中是否可用?p>

“是什么意思?”;“野生指针”;在C中? 可以告诉我,C中的野生指针的含义,如何获取它,C++中是否可用?p>,c,pointers,C,Pointers,它是指向未初始化对象或状态不好的对象的指针。使用此指针将导致问题。wiki是一个很好的解释来源。它不是s的标准术语。它通常用来指指向无效内存位置的指针。 int*p; *p=0//P是一个通配符指针 或 C中的野生指针是在首次使用之前尚未初始化的指针。 发件人: 野生指针是通过省略来创建的 在启动之前进行必要的初始化 第一次使用。因此,严格说来,, 编程语言中的每个指针 不强制初始化的 以野生指针开始 这通常是由于跳跃引起的 在初始化过程中,而不是通过 省略它。大多数编译器都能够 对此提出警告


它是指向未初始化对象或状态不好的对象的指针。使用此指针将导致问题。wiki是一个很好的解释来源。

它不是s的标准术语。它通常用来指指向无效内存位置的指针。
int*p;
*p=0//P是一个通配符指针


C中的野生指针是在首次使用之前尚未初始化的指针。 发件人:

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

这通常是由于跳跃引起的 在初始化过程中,而不是通过 省略它。大多数编译器都能够 对此提出警告

乙二醇

要获得一个野生(又称悬空)指针,请执行以下操作:

  • 创建一个对象
  • 创建指向该对象的指针
  • 删除对象
  • 忘记将指针设置为null

指针现在被归类为“野生”,因为它指向任意内存块,在这种状态下使用它可能会导致程序出现问题。

未使用任何地址初始化的指针称为野生指针。它可能包含任何垃圾地址,因此取消引用野生指针是危险的

一个没有定位任何数据类型varable的端口,varable被称为野生指针

标准没有定义或使用术语“野生”。我会小心地“纠正”其他人对其含义的看法,尤其是避免引用随机的非规范性互联网垃圾来支持我的立场

对我来说,它意味着一个既不引用合法对象也不为空的指针。这些类型指针值的可能来源可能包括未初始化的指针对象、已不存在的对象、计算的指针值、未正确对齐的指针值、指针本身意外损坏或指针指向的对象等

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语言中,有各种各样的方法可以获取无效的指针值。我最喜欢的是那个试图通过将对象的地址写入文件来“保存”对象的人。奇怪的是,当他在程序的另一次运行中读回这些指针值时,它们不再指向他的对象。真想不到


但这正是狂野对我的意义。因为它不是一个规范性的术语,它的意思是说或写它的人的意思。问问他或她

通配符指针是在具有不正确或不再正确的值时使用的任何指针(特别是作为L_值{ie(*pointer)=x})。它还可以用来描述将未定义为指针的内存用作指针的情况(可能是跟随了野生指针,或者使用了过时的结构定义)


没有官方的定义。这只是我们在引用某些指针错误或这些错误的结果时使用的词语。

野生指针是一种既不指向有效对象(如果适用,则指向指定类型)也不指向可分辨空值(如果适用)的指针


请阅读此处的详细信息

未初始化的指针称为野生指针。 如果你试试看

int*p//指向任何随机或未知的位置。 *p=16/某些未知内存位置已损坏。不应执行此操作/


这会对您的程序造成巨大威胁。B'Coz,因为它们指向某个任意内存位置,更改该位置的内容可能会导致程序崩溃或行为不正常。

野生指针是一个存在声明但尚未定义的指针。这意味着我们已经声明了一个指针- 数据类型*ptr//但不定义它包含的地址 *ptr=100//wild指针未指向任何有效地址。因此我们将得到错误消息
printf(“ptr:%d”,ptr)//我们将得到:0(在gcc编译器中)

该术语也用于已初始化的指针,但它现在已成为一个wildiesis死指针。看纳文的回答:@Magnus-谢谢你的编辑@sbi-我通常听说您描述的状态中的指针被称为“悬挂指针”,但您是正确的,它们实际上与“野生指针”处于相同的状态。不完全相同-在许多具有动态内存的系统中,悬挂指针指向的数据在被重用之前似乎是有效的,而一个野生的会指向垃圾。我想你必须称它们为悬挂指针,野生的是统一的+1,用于提到“悬挂指针”。不过,我怀疑悬挂指针不是野生指针,正如Eineiki所说。标准没有定义“野生”或“悬挂”,因此这些更正充其量是可疑的。本标准使用术语“有效”和“无效”。@sbi:仅在块范围内(即,自动存储持续时间)。将该定义放在文件范围内,需要将其初始化为NULL。如果对象违反其不变量,也可以说它处于错误状态,但指向它的指针不是野生指针。所以这个定义有点错误。它取决于坏状态的性质。但我明白你的意思,我已经参考了wiki页面以了解确切的定义。请注意,该语言要求通过类型为unsigned char的左值进行访问始终可以用于读取或写入对象,即使该对象在被解释为其声明类型时处于错误状态。当指针指向的位置超出范围时(或被释放),它将成为悬挂指针,而不是野生指针。野生指针是一个未初始化的指针。@Technowise:我不同意。我听说这两个术语可以互换使用。+1用于指出该术语不精确,并给出4个可能的原因。Wil
int f(int i)
{
    char* dp;    //dp is a wild pointer
    ...
}
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
   }
}