Ver Mensaje Individual
  #14 (permalink)  
Antiguo 21/01/2012, 01:55
drakgoku1
(Desactivado)
 
Fecha de Ingreso: agosto-2011
Mensajes: 327
Antigüedad: 12 años, 7 meses
Puntos: 3
Respuesta: Cojer posiciones matrices en c -->

Cita:
Iniciado por gonzo13 Ver Mensaje
El código no accede a las posiciones a[-1] y a[-2], puesto que al calcular los valores, el índice i tiene un valor inicial de dos (i = 2) y en cada iteración se incrementa en uno su valor, no se decrementa (i++).



El nombre correcto del error se conoce como desbordamiento (u overflow en inglés), y se produce porque intentas activar más bits de los que tienes disponibles. Es decir, si dispones de 16 bits para un tipo entero, activas todos los bits a 1 (obteniendo el valor decimal límite) e intentas sumar 1 de nuevo, la variable se desborda y, por decirlo de alguna manera, "los bits se reinician". Generalmente, el desbordamiento es complicado de depurar, aunque aquí salta a la vista.

Para evitar los números negativos al desbordar (aunque en este caso te facilitan el darte cuenta porque se trata de matemáticas y la suma de dos números positivos no puede generar un número negativo), podrías usar el tipo de dato unsigned int, que sólo trabaja con valores positivos, aunque esto no te evitaría el problema, simplemente lo retrasaría.

Dependiendo de qué Sistema Operativo estés usando y qué versión del mismo, los límites de cada tipo de dato pueden variar. Por ejemplo, en Sistemas Operativos Unix, puedes consultar el rango en la libreria /usr/include/limits.h

Un saludo,
gonzo.
Windows 7 (pero no es exactamente 7 , es un tipo game que me da más problemas que otro windows 7 , lo tengo para jugar alguna vez :) utilizé unsigned int ayer , pero tampoco :)

Si tienes alguna pista ya comentarás

saludos.