Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda sobre vectores

Estas en el tema de Duda sobre vectores en el foro de C/C++ en Foros del Web. Hola. Probando cosas sobre los arrays, me ha surgido una duda. Se supone que haciendo esto... int a[max]; ... max indica el numero maximo de ...
  #1 (permalink)  
Antiguo 02/12/2006, 20:26
Avatar de spike_jr  
Fecha de Ingreso: febrero-2005
Ubicación: Valencia
Mensajes: 114
Antigüedad: 19 años, 3 meses
Puntos: 2
Duda sobre vectores

Hola.

Probando cosas sobre los arrays, me ha surgido una duda. Se supone que haciendo esto...

int a[max];

... max indica el numero maximo de elementos que contendrá el array. Por ejemplo, si hago...

int a[5];

... en total habrá 5 elementos en el array que se accederán desde a[0] hasta a[4].

Ok. Pero que pasa si hago : int a[0]; ??

Para probarlo he hecho lo siguiente:

Cita:
int main()
{
int a[0];
int i;

for(i=0;i<MAX;i++){
a[i]=i;
cout << a[i] << endl;
}
system("pause");
return 0;
}
Lo que he comprobado es lo siguiente:

Si MAX <= 7 --> todo funciona bien (en teoria) y me sale por pantalla lo correcto

Si MAX > 7 --> me da error

Alguien me puede decir porque ocurre esto??

Saludos,

Spike_jr
__________________
Cita:
"La programación es una carrera entre ingenieros de software luchando para construir programas cada vez más grandes, mejores y a prueba de idiotas, y el universo intentando producir cada vez más grandes y mejores idiotas. Por ahora, gana el universo." by Rich Cook
  #2 (permalink)  
Antiguo 03/12/2006, 03:15
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Un buen compilador como VC++ ni siquiera te deja compilar eso, no tiene uso ni sentido.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 03/12/2006, 03:54
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
Para que aclares tu duda tienes que comprender como es que C/C++ maneja esto de los arrays o vectores.

en lenguajes como VB tus arrays tiene un limite ya que el lenguaje hace comprobacion de acceso.

en C/C++ no es asi.

el decir que :

int a[10];

10 es el numero maximo de este array no es del todo cierto, lo correcto es:
10 es el numero recervado para tu array, C no te indicara si lo exedes, pero esto te puede causar problemas.

por tanto si haces :
int a[0];
tu puedes manejar a[1000] = x; ó el numero maximo posible de un unsigned int . pero estarias accediendo a sonas de memoria que no tienes recerbadas. y por consecuensia causaria errores.
  #4 (permalink)  
Antiguo 03/12/2006, 03:56
Avatar de spike_jr  
Fecha de Ingreso: febrero-2005
Ubicación: Valencia
Mensajes: 114
Antigüedad: 19 años, 3 meses
Puntos: 2
lo hago con dev-c++, se supone que compila con gcc pero no se que version. El VC++ que compilador utiliza??
__________________
Cita:
"La programación es una carrera entre ingenieros de software luchando para construir programas cada vez más grandes, mejores y a prueba de idiotas, y el universo intentando producir cada vez más grandes y mejores idiotas. Por ahora, gana el universo." by Rich Cook
  #5 (permalink)  
Antiguo 03/12/2006, 04:13
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años
Puntos: 2
esto de que no compile depende del compilador el que usa el DevC++ si compila bien sin indicarte ni warnig, el VC++(compilador), no compila dando 2 errores.

No se puede asignar una matriz de tamaño constante 0 y
Tamaño (de a), desconocido.

sin embargo lo que te comente anteriormente se aplica a cualquier tamaño,
  #6 (permalink)  
Antiguo 03/12/2006, 04:18
Avatar de spike_jr  
Fecha de Ingreso: febrero-2005
Ubicación: Valencia
Mensajes: 114
Antigüedad: 19 años, 3 meses
Puntos: 2
Todo aclarado, gracias.

Saludos,

Spike_jr
__________________
Cita:
"La programación es una carrera entre ingenieros de software luchando para construir programas cada vez más grandes, mejores y a prueba de idiotas, y el universo intentando producir cada vez más grandes y mejores idiotas. Por ahora, gana el universo." by Rich Cook
  #7 (permalink)  
Antiguo 03/12/2006, 18:27
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Hum... He visto que en determinados lugares muy específicos se usa algún array de tamaño 0 (el objetivo, no lo sé), pero C estándar no lo permite (ni C99).

Si quieres que gcc te avise, asegúrate de tener todos los Warnings activados en las opciones de compilación (-Wall) o usar pedantic (-pedantic).

Te avisará con algo como:

test.c:4: warning: ISO C forbids zero-size array `y'
  #8 (permalink)  
Antiguo 04/12/2006, 07:03
Avatar de spike_jr  
Fecha de Ingreso: febrero-2005
Ubicación: Valencia
Mensajes: 114
Antigüedad: 19 años, 3 meses
Puntos: 2
Yo lo habia probado para el compilador que trae el IDE Dev c++(4.9.8.0), que es el gcc y tiene activados todos los warnings. Tampoco he conseguido averiguar que version utiliza.
He probado el del Visual C++ 6.0 y me da el warning, igual que el gcc q tg en Linux con las opciones de -Wall.

Entonces supongo que sera que el Devc++ no le da bien las instrucciones al gcc, pq es raro q falle el gcc...

Saludos,

Spike
__________________
Cita:
"La programación es una carrera entre ingenieros de software luchando para construir programas cada vez más grandes, mejores y a prueba de idiotas, y el universo intentando producir cada vez más grandes y mejores idiotas. Por ahora, gana el universo." by Rich Cook
  #9 (permalink)  
Antiguo 04/12/2006, 07:38
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años
Puntos: 17
Cita:
Iniciado por spike_jr Ver Mensaje
Yo lo habia probado para el compilador que trae el IDE Dev c++(4.9.8.0), que es el gcc y tiene activados todos los warnings. Tampoco he conseguido averiguar que version utiliza.
He probado el del Visual C++ 6.0 y me da el warning, igual que el gcc q tg en Linux con las opciones de -Wall.

Entonces supongo que sera que el Devc++ no le da bien las instrucciones al gcc, pq es raro q falle el gcc...

Saludos,

Spike
A mi me funciona tanto por consola como en Dev-C++ si le pasas -pedantic como te dije:

Cita:
C:\Dev-Cpp\bin>cat C:\main.c
int main()
{
int a[0];
*a = 6;
return 0;
}

C:\Dev-Cpp\bin>".\gcc.exe" -pedantic -c C:\main.c
C:\main.c: In function `main':
C:\main.c:3: warning: ISO C forbids zero-size array `a'

C:\Dev-Cpp\bin>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:07.