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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  ¿Por què da desbordamiento este codigo?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: ¿Por què da desbordamiento este codigo?  (Leído 3,852 veces)
theghost_te

Desconectado Desconectado

Mensajes: 53


Ver Perfil
¿Por què da desbordamiento este codigo?
« en: 22 Noviembre 2010, 00:36 am »

Hola amigos estaba haciendo un codigo bastante extenso en VB6 y al ejecutar fallò en un bucle FOR que daba desbordamiento, luego lo ejecute paso a paso con F8 y el desbordamiento se producia al restar 2 variables de tipo BYTE aa = 2 y bb = 58, y guardarlas en una de tipo INTEGER llamada r. asi que ejecute por separado la parte que me daba errores:

Código:

Private Sub Form_Load()
    Dim aa As Integer, bb As Byte, r As Integer
    aa = 2
    bb = 58
    r = aa - bb
    'r = -2000
End Sub


si ejecutan ese code veran que les da desbordamiento.
La verda no sè por què me da errores, el resultado seria -56 que se guarda en r que es un INTEGER y deberia soportar el valor.
¿en què fallé?


« Última modificación: 22 Noviembre 2010, 00:56 am por theghost_te » En línea

Dessa


Desconectado Desconectado

Mensajes: 624



Ver Perfil
Re: ¿Por què da desbordamiento este codigo?
« Respuesta #1 en: 22 Noviembre 2010, 00:53 am »

En el code estas declarando r como Byte


En línea

Adrian Desanti
theghost_te

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: ¿Por què da desbordamiento este codigo?
« Respuesta #2 en: 22 Noviembre 2010, 00:57 am »

No , lo que pasa es que me equivoque al escribir
En línea

theghost_te

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: ¿Por què da desbordamiento este codigo?
« Respuesta #3 en: 22 Noviembre 2010, 00:59 am »

Aqui esta la captura de pantalla
http://www.uploadfilesystem.com//viewimage.php?file=/imagenes/10/11/22/csT84224.jpg
« Última modificación: 22 Noviembre 2010, 01:06 am por theghost_te » En línea

Dessa


Desconectado Desconectado

Mensajes: 624



Ver Perfil
Re: ¿Por què da desbordamiento este codigo?
« Respuesta #4 en: 22 Noviembre 2010, 01:09 am »

No se ve bien la captura pero parece que aa es byte en dicha imagen

PD: si editas despues que alguien te responde se desordena el hilo

En línea

Adrian Desanti
theghost_te

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: ¿Por què da desbordamiento este codigo?
« Respuesta #5 en: 22 Noviembre 2010, 01:11 am »

volvi a subir la imagen en otro server pincha en el enlace otra vez
Ah y prueba el code, deberas me da desboramiento
« Última modificación: 22 Noviembre 2010, 01:15 am por theghost_te » En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: ¿Por què da desbordamiento este codigo?
« Respuesta #6 en: 22 Noviembre 2010, 01:44 am »

Byte solo va desde 0 hasta 255, 2 - 58 da un número negativo y eso no es compatible con el tipo de variable Byte, igualas r a el resultado de (aa - bb) siendo este incorrecto y una igualación, los dos lados deben ser coherentes.
La solucion es cambiar de tipo de variable y ya está... ;)

DoEvents! :P
En línea

Dessa


Desconectado Desconectado

Mensajes: 624



Ver Perfil
Re: ¿Por què da desbordamiento este codigo?
« Respuesta #7 en: 22 Noviembre 2010, 03:24 am »

Como te dice Mr Frog o cambias el tipo de variable o lo combiertes, depende el caso
Código:
Option Explicit

Private Sub Form_Load()
    Dim aa As Byte, bb As Byte, r As Integer
    aa = 2
    bb = 58
    r = CInt(aa) - CInt(bb)
    MsgBox r
End Sub


En línea

Adrian Desanti
theghost_te

Desconectado Desconectado

Mensajes: 53


Ver Perfil
Re: ¿Por què da desbordamiento este codigo?
« Respuesta #8 en: 22 Noviembre 2010, 03:45 am »

Ok man , pero por que sucede esto? como ves el codigo esta bien r (INTEGER) deberia soportar el -56 resultante de aa-bb, esto solo se da en VB6? o tambien en el resto de lenguajes? .solo una explicaciòn para entenderlo. :laugh:
En línea

Dessa


Desconectado Desconectado

Mensajes: 624



Ver Perfil
Re: ¿Por què da desbordamiento este codigo?
« Respuesta #9 en: 22 Noviembre 2010, 03:49 am »

Porque el lenguaje antes de otogar a r (integer) hace la cunta en byte (2 - 58) es overflow

Fijate que así no da error (no es overflow)

Código:

Option Explicit

Private Sub Form_Load()
    Dim aa As Byte, bb As Byte, r As Integer
    aa = 59
    bb = 58
    r = aa - bb
    MsgBox r
End Sub



pero así ...


Código:

Option Explicit

Private Sub Form_Load()
    Dim aa As Byte, bb As Byte, r As Integer
    aa = 2
    bb = 58
    r = aa - bb
    MsgBox r
End Sub










« Última modificación: 22 Noviembre 2010, 03:53 am por Dessa » En línea

Adrian Desanti
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines