es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

CPPCheck referencia nula de puntero

Mantengo algo de código C embebido (sin sistema operativo). He realizado algunas actualizaciones y he ejecutado CPPCheck en mis cambios.

CPPCheck ha mostrado el error ‘Null pointer dereference: (volatile unsigned int*)0’. Esto no está en mis cambios de código, pero estoy interesado en entender qué está sucediendo. Según entiendo, el comportamiento de hacer referencia a un puntero nulo no está definido.

typedef void (*pfFunc_T)( void );

/* reiniciar el cargador de arranque */
pfFunc_T pfFunc;

__interrupt_disable();

pfFunc = (pfFunc_T)( ( (volatile U32)0 ) ); /* error de CPPCheck */

if ( pfFunc != NULL ) /* ningún programa cargado */
{
pfFunc();
}

Es una memoria mapeada y el cargador de arranque es el primero. ¿Podría estar llamando al cargador de arranque desde una aplicación diferente?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error de CPPCheck ‘Referencia nula de puntero: (volatile unsigned int*)0’ señala un posible problema en el código donde se está dereferenciando un puntero nulo, lo cual podría llevar a un comportamiento indefinido. En el fragmento de código dado, se asigna al puntero de función pfFunc la dirección de la ubicación mapeada en memoria en la dirección 0, que se considera un puntero nulo en este contexto. La declaración if verifica si el puntero pfFunc no es nulo antes de llamar a la función a la que apunta.

    Sin embargo, no está claro a partir de la información proporcionada si se pretende llamar al bootloader desde una aplicación diferente o no. Sería mejor revisar el código y los requisitos del sistema para determinar si llamar al bootloader desde una aplicación diferente es válido o no. Además, se recomienda investigar por qué se generó el error de CPPCheck y tomar las medidas adecuadas para solucionarlo.

Comments are closed.