• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

183
Vistas
Desreferenciar un puntero vacío

Tengo el siguiente código:

 #include <inttypes.h> #include <stdlib.h> struct a { void *p; }; int main(void) { struct a *ptr = malloc(sizeof(struct a)); ptr->p = malloc(sizeof(uint8_t)); *((uint8_t *) ptr->p) = 2; return 0; }

Estoy lanzando el puntero vacío antes de desreferenciar para evitar la advertencia

advertencia: desreferenciando el puntero 'void *'

¿Estoy rompiendo alguna regla al hacer esto o este código es bueno?

about 3 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Sí, este código es legal y no causa un comportamiento indefinido (a menos que malloc devuelva NULL ).

about 3 years ago · Santiago Trujillo Denunciar

0

Según los mandatos estándar, este código se ve bien. se puede usar un puntero a un tipo de carácter para apuntar al objeto sin romper la regla de alias.

Para citar la norma, capítulo §6.3.2.3

[...]. Cuando un puntero a un objeto se convierte en un puntero a un tipo de carácter, el resultado apunta al byte direccionado más bajo del objeto. Los incrementos sucesivos del resultado, hasta el tamaño del objeto, generan punteros a los bytes restantes del objeto.

about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda