Tengo una duda con un arreglo, porque el iterador me da 4, a que se debe, AYUDA?
//Arreglo/error.cpp/
#include <iostream>
using std::cout;
using std::endl;
int main(void){
int i=0;
int arreglo[3]={3,3,3};
arreglo[i++]=1;
arreglo[i++]=2;
arreglo[++i]=4;
cout<<"arreglo[0]= "<<arreglo[0]<<endl;
cout<<"arreglo[1]= "<<arreglo[1]<<endl;
cout<<"arreglo[2]= "<<arreglo[2]<<endl;
cout<<"iterador i= "<<i<<endl;
return 0;
}
'i' debería darte 3. Si da 4, es por el error que te comento ahora:
La tercera vez que asignas al arreglo ese 4, pusiste ++i. Por tanto, estás asignando a la posición 3 en vez de a la 2. Tienes que poner "i++" o "i" asecas ahí. "++i" incrementa primero, con lo que sale del array.
El por qué de que 'i' te de 4 se debe a que la variable 'i' puede estar colocada justo después del array en memoria. Por tanto, al acceder a arreglo[3], estás accediendo sin querer a 'i'. Esto es algo dependiente del compilador, así que simplemente corrige el problema y nunca accedas a un array fuera de sus límites.
Como el arreglo es memoria contigua, probablemente el compilador asigna la variable e inmediatamente después del arreglo, por lo tanto al acceder a esa dirección de memoria con el arreglo[3]=4(invalido), accede al valor de i y por eso te muestra eso u otra razón podría ser que la memoria que viene justo después del arreglo[2], el SO te la haya asignado al programa, por lo tanto la puedes manejar aunque estés fuera de los índices de tu arreglo.
Mmm? Te estás auto-respondiendo? No entiendo el comentario xD
asi es ya verifique mi duda, gracias a todos