谁能告诉我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中获取无效的指针值。我最喜欢的必须是试图通过将对象的地址写入文件来“保存”对象的人。奇怪的是,当他在程序的不同运行期间回读那些指针值时,它们不再指向他的对象。看中了。

但这就是野性对我的意义。由于这不是一个规范性术语,因此它意味着无论说或写的人都意味着它的意思。问他或她。

10-07 19:16
查看更多