punteros - pointers significado
¿Cuál es el significado de "puntero salvaje" en C? (11)
El estándar no define o utiliza el término "salvaje". Debería tener cuidado de "corregir" las opiniones de otras personas sobre lo que significa, y especialmente evitaría citar basura no convencional de Internet no normativa para apoyar mi posición.
Para mí, significaría un puntero que ni se refiere a un objeto legítimo, ni es NULL. Las posibles fuentes de estos tipos de valores de puntero pueden incluir objetos de puntero no inicializados, objetos que han dejado de existir, valores de puntero computados, valores de puntero mal alineados, corrupción accidental del puntero en sí, o lo que apuntó, etc.
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
}
}
y así sucesivamente y así sucesivamente. Hay muchas formas de obtener un valor de puntero no válido en C. Mi favorito tiene que ser el tipo que intentó "guardar" sus objetos escribiendo sus direcciones en un archivo. Curiosamente, cuando volvió a leer esos valores de puntero durante una ejecución diferente del programa, ya no apuntaban a sus objetos. De lujo que.
Pero eso es lo que significa salvaje para mí. Como no es un término normativo, significa lo que la persona que habló o escribió lo hizo. Pregúntale a él o ella.
¿Alguien puede decirme, el significado de puntero salvaje en C, cómo obtenerlo y está disponible en C ++?
El puntero salvaje es un puntero cuya declaración está presente pero aún no se ha definido. Significa que hemos declarado un puntero - data_type * ptr; // pero no define qué dirección contiene * ptr = 100 // el puntero salvaje no apunta a ninguna dirección válida. Por lo tanto, obtendremos ERROR printf ("ptr:% d", ptr); // obtendremos: 0 (en compilador gcc)
El puntero salvaje es un puntero que no apunta a un objeto válido (del tipo indicado, si corresponde), o a un valor nulo distinguido, si corresponde.
Lea más acerca de Wild Pointer aquí
El puntero sin inicializar se llama puntero salvaje. Supongamos que si lo intentas
int * p; // apuntando a cualquier ubicación aleatoria o desconocida. * p = 16; / Alguna ubicación de memoria desconocida se está corrompiendo. Esto nunca debe hacerse. /
Esto puede crear una gran amenaza para su programa. B''Coz porque apuntan a una ubicación de memoria arbitraria y cambiar el contenido de esa ubicación puede hacer que un programa se bloquee o se comporte mal.
No es el término estándar. Normalmente se usa para referirse a los punteros que apuntan a una ubicación de memoria no válida. int *p; *p = 0; //P is a wild pointer
O
int *p = NULL;
{
int a;
p = &a; // as soon as ''a'' goes out of scope,''p'' is pointing to invalid location
}
*p = 0;
Para obtener un puntero (alias que cuelga) salvaje:
- Crear un objeto
- Crear un puntero a ese objeto.
- Eliminar el objeto
- Olvídate de poner el puntero a nulo
El puntero ahora se clasifica como "salvaje", ya que apunta a una parte arbitraria de la memoria y su uso en este estado podría causar problemas con su programa.
Un puntero de comodín es cualquier puntero que se usa (particularmente como un valor_L {es decir (* puntero) = x}) mientras que tiene un valor que es incorrecto o ya no es correcto. También podría usarse para describir el uso de la memoria que no está definida como un puntero como un puntero (posiblemente al haber seguido un puntero salvaje o al usar definiciones de estructura obsoletas).
No hay una definición oficial. Son solo palabras que usamos cuando nos referimos a ciertos errores de puntero o los resultados de esos errores.
Un puntero que no se inicializa con ninguna dirección se llama como un puntero de comodín. Puede contener cualquier dirección de basura, por lo que deshacer la referencia a un puntero salvaje es peligroso
Un puntero salvaje en C es un puntero que no se ha inicializado antes de su primer uso. De Wikipedia :
Los punteros de comodines se crean omitiendo la inicialización necesaria antes del primer uso. Por lo tanto, estrictamente hablando, cada puntero en lenguajes de programación que no impone la inicialización comienza como un puntero salvaje.
Esto ocurre más a menudo debido a saltar sobre la inicialización, no omitiéndola. La mayoría de los compiladores son capaces de advertir sobre esto.
p.ej
int f(int i)
{
char* dp; //dp is a wild pointer
...
}
un ponter que no tiene ningún tipo de datos que pueda variar y que varable se llame el puntero salvaje
Es un puntero a un objeto sin inicializar o un objeto con un estado malo. el uso de este puntero causará problemas. La wiki es una buena fuente de explicación.