Errores comunes de principiante en C++ (y como evitarlos)

Angel Carrero
12 de Agosto del 2026

Después de ver bastantes hilos por aquí, van algunos de los errores que más se repiten cuando alguien empieza con C++. Si os suena alguno, o tenéis más para añadir, contad el vuestro en una respuesta.

1. Olvidar inicializar variables. En C++ una variable local no se inicializa a 0 automáticamente. Si declaras int contador; y la usas antes de asignarle un valor, el resultado es basura de memoria, no necesariamente 0.

2. Comparar con = en vez de ==. if (x = 5) compila (es una asignación que además evalúa a verdadero), pero casi nunca es lo que querías escribir. Si tu compilador te avisa con un warning de este tipo, no lo ignores.

3. Mezclar new/delete con malloc/free. Si reservas memoria con new, se libera con delete (o delete[] para arrays). Si reservas con malloc, se libera con free. Mezclarlos es comportamiento indefinido.

4. Desbordar un array. C++ no comprueba límites en arrays estilo C, ni en muchos casos con std::vector si usas operator[]. Acceder a v[10] en un vector de tamaño 5 no siempre falla de forma visible, a veces simplemente corrompe memoria en silencio.

5. Punteros colgantes (dangling pointers). Guardar la dirección de una variable local y usarla después de que la función donde se creó ya haya terminado. La variable ya no existe, pero el puntero sigue apuntando ahí.

6. No comprobar el retorno de scanf/cin. Si el usuario mete texto donde se espera un número, la lectura falla y el programa puede quedarse en un bucle raro o seguir con una variable sin el valor esperado.

¿Cuál os costó más pillar cuando empezasteis?

Angel Carrero


David Carrero
12 de Agosto del 2026

Añado uno que no está en la lista y que veo muchas veces por aquí en el foro:

7. Usar funciones inseguras de C como strcpy, sprintf o gets. Ninguna de las tres comprueba el tamaño del buffer de destino, así que si el texto de origen es más largo de lo esperado, escriben más allá del final del array y corrompen memoria (el clásico buffer overflow, además de un vector de seguridad real, no solo un bug). En C++ moderno, lo normal es evitarlas directamente usando std::string en vez de arrays de char, y si hace falta trabajar con C puro, sus versiones con límite explícito: strncpy, snprintf, y jamás gets (de hecho fue eliminada del propio estándar de C en C11 precisamente por esto).

David Carrero


Jota CT
12 de Agosto del 2026

El mío fue el de olvidar el & en un parámetro por referencia. Tenía una función que se suponía que modificaba una variable pasada por parámetro, la llamaba, y la variable original se quedaba exactamente igual después de la llamada. Pasé horas revisando la lógica de dentro de la función pensando que el cálculo estaba mal, cuando en realidad el cálculo era correcto, solo que se aplicaba sobre una copia del parámetro (porque había declarado void modificar(int x) en vez de void modificar(int &x)), así que la función sí funcionaba, solo que modificaba una variable que se destruía al salir de la función. Desde entonces reviso la firma de la función antes que ninguna otra cosa cuando algo «no cambia» como debería.

Jota CT