谁能告诉我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中获取无效的指针值。我最喜欢的必须是试图通过将对象的地址写入文件来“保存”对象的人。奇怪的是,当他在程序的不同运行期间回读那些指针值时,它们不再指向他的对象。看中了。
但这就是野性对我的意义。由于这不是一个规范性术语,因此它意味着无论说或写的人都意味着它的意思。问他或她。