elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Arreglos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Arreglos  (Leído 2,111 veces)
angeljonh

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Arreglos
« en: 20 Agosto 2017, 02:16 am »

Tengo una duda con un arreglo, porque el iterador me da 4, a que se debe, AYUDA?

Código:
//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;
}


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Arreglos
« Respuesta #1 en: 20 Agosto 2017, 13:04 pm »

'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.


En línea

angeljonh

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: Arreglos
« Respuesta #2 en: 20 Agosto 2017, 18:05 pm »

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.
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Arreglos
« Respuesta #3 en: 20 Agosto 2017, 18:07 pm »

Mmm? Te estás auto-respondiendo? No entiendo el comentario xD
En línea

angeljonh

Desconectado Desconectado

Mensajes: 20


Ver Perfil
Re: Arreglos
« Respuesta #4 en: 20 Agosto 2017, 18:16 pm »

asi es ya verifique mi duda, gracias a todos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
con arreglos
Java
artang 0 2,147 Último mensaje 31 Marzo 2009, 04:54 am
por artang
arreglos en c
Programación C/C++
arodriguez98 5 2,304 Último mensaje 4 Diciembre 2014, 23:20 pm
por fary
ARREGLOS
Programación C/C++
JakiRuiz 1 1,319 Último mensaje 25 Febrero 2015, 17:08 pm
por eferion
arreglos
Java
diegormirez134 1 2,135 Último mensaje 19 Junio 2016, 03:24 am
por hectornunezrivas
arreglos en c
Programación C/C++
megadethrust1 5 2,088 Último mensaje 13 Diciembre 2016, 04:33 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines