Sé que Visual Studio en las opciones de depuración llenará la memoria con un valor conocido. ¿Tiene g ++ (cualquier versión, pero gcc 4.1.2 es más interesante) tiene alguna opción que llene una estructura POD local no inicializada con valores reconocibles?¿Puede g ++ completar variables de POD no inicializadas con valores conocidos?
struct something{ int a; int b; };
void foo() {
something uninitialized;
bar(uninitialized.b);
}
espero uninitialized.b
ser aleatoriedad imprevisible; claramente un error y se encontró fácilmente si la optimización y las advertencias están activadas. Pero compilado con -g solamente, sin advertencia . Un colega tenía un caso donde el código similar funcionaba porque tenía un valor válido; cuando el compilador se actualizó, comenzó a fallar. Pensó que era porque el nuevo compilador estaba insertando valores conocidos en la estructura (del mismo modo que VS rellena 0xCC). En mi propia experiencia, solo fueron diferentes los valores aleatorios que no resultaron ser válidos.
Pero ahora tengo curiosidad - ¿hay alguna configuración de g ++ que haría que se llene la memoria que la norma de lo contrario dice debe desinicializar?
No creía que la característica existiera tampoco, pero el manual de gcc es largo y profundo, y me he sorprendido por lo que está escondido allí antes. –