Aquí está el extracto del código.¿Por qué las entradas de este mapa STL no se inicializan en GCC 4.5.1?
std::map<double, double> temp;
temp[0] = .1;
cout << temp[1] << endl;
// result varies based on compiler
Estoy compilando utilizando la versión de GCC 4.4.1 y me da un valor de 0 a temp[1]
, como espero. Mi compañero de trabajo está compilando en GCC versión 4.5.1. En el modo de depuración (con la bandera -g
), obtiene 1000
. Al compilar el modo de lanzamiento (-O2
bandera), obtiene 0
.
Mi idea es que este es el tipo de problema que normalmente surge con variables no inicializadas, excepto que se supone que los mapas llaman al constructor predeterminado en sus elementos, basado en this question y muchos otros similares.
Por otra parte, El C++ biblioteca estándar por Josuttis, establece que
Si se utiliza una clave como el índice, para el que todavía no existe ningún elemento, un nuevo elemento se inserta en el mapa de forma automática. El valor del nuevo elemento es inicializado por el constructor predeterminado de su tipo.
¿Por qué los elementos en el mapa no se están inicializando en GCC 4.5.1 en modo de depuración? ¿No entiendo lo que otros han dicho sobre este comportamiento correctamente? ¿La construcción predeterminada de nuevos elementos es algo que no es necesariamente parte del estándar? ¿O podría ser esto un error real en el compilador?
Tienes razón. Probablemente tenga corrupción de memoria en otro lado. –
¿Puedes escribir un programa simple compilable que replique el problema? Hacer esto normalmente resolverá su problema, si no, entonces podemos probarlo en nuestros sistemas. –