Advertencia: conversión de puntero a entero de diferente tamaño en C++

Naila Saad Siddiqui 15 febrero 2024
Advertencia: conversión de puntero a entero de diferente tamaño en C++

Este artículo rápido trata sobre la solución a la advertencia de convertir de puntero a entero de diferente tamaño en C++. La advertencia a menudo se muestra como un error en diferentes compiladores.

Advertencia: conversión de puntero a entero de diferente tamaño en C++

El compilador emite advertencias y errores para informar al programador que algo anda mal con el código. Los errores prohíben la ejecución del código, mientras que las advertencias permiten la ejecución del código, pero a veces esta ejecución puede causar algunos problemas de manejo de la memoria.

Por lo tanto, se recomienda limpiar su código de todas las advertencias y errores antes de ejecutarlo.

La advertencia de “transmitir desde un puntero a un entero de diferente tamaño” se produce cuando intenta guardar el valor de un entero en una variable de puntero, como se muestra en el código a continuación.

int var = 897;
int* ptr;

ptr = var;  // this conversion is wrong

El código anterior genera una advertencia o un error, según el tipo de compilador.

Producción:

espectáculos de advertencia

Este tipo de conversión es incorrecta por algunas razones:

  1. ptr es una variable de tipo puntero que se utiliza para guardar las direcciones. Esto significa que puede apuntar a alguna ubicación de memoria, y esa ubicación de memoria puede tener algún valor guardado.

    Por lo tanto, no puede guardar datos de tipo int en sí mismo. Podemos guardar la dirección de var en esta variable puntero, no el valor.

  2. En segundo lugar, el tamaño de ambas variables es diferente, por lo que existe la posibilidad de pérdida de datos en caso de esta conversión.

Podemos hacer lo siguiente para solucionar este error.

int main() {
  int var = 897;
  int* ptr;

  ptr = &var;
  cout << "ptr contains: " << *ptr << endl;
  cout << "var contains: " << var << endl;
}

Esto dará la siguiente salida.

solución al error