Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/08/2007, 15:54
Sanva
 
Fecha de Ingreso: diciembre-2005
Ubicación: Redondela (Galicia)
Mensajes: 368
Antigüedad: 19 años
Puntos: 1
Capacidad de los tipos

Hay algo en C++ acerca de la capacidad de almacenamiento de los tipos que no comprendo.

Veamos, tengo este código:

Código:
#include<iostream>
using namespace std;
int main(){
    short b;
    cin >> b;
    cout << b << endl;
    return 0;
}
Habiendo compilado el programa en una plataforma de 32 bits no debería poder meter un entero superior a 2147483647 ni inferior a -2147483648 sin producir resultados inesperados. Cierto

Otro:

Código:
#include<iostream>
using namespace std;
int main(){
    bool b;
    cin >> b;
    cout << b << endl;
    return 0;
}
En este sólo puedo meter los valores 0 o 1. Correcto

Pero he aquí mi problema:

Código:
#include<iostream>
using namespace std;
int main(){
    char b[5];
    cin >> b;
    cout << b << endl;
    return 0;
}
Se supone que ahí sólo podría almacenar una cadena de 4 carácteres (de hecho, si intento compilar algo como char b[5] = "qwert"; el compilador no me deja). Pero metiendo los carácteres con cin entran muchos más... ¿por qué?

¿Alguien podría explicármelo?

Concretamente, el error que recibo al pasarme mucho del supuesto espacio de la variable al introducir texto mediante cin es el siguiente:

Cita:
9597 [main] prueba 2684 _cygtls::handle_exceptions: Exception: STATUS_ILLEGAL
_INSTRUCTION
108254 [main] prueba 2684 open_stackdumpfile: Dumping stack trace to prueba.exe
.stackdump
347588 [main] prueba 2684 _cygtls::handle_exceptions: Exception: STATUS_ACCESS_
VIOLATION
463187 [main] prueba 2684 _cygtls::handle_exceptions: Error while dumping state
(probably corrupted stack)
Pero como dije, tengo que pasarme más de lo que yo me esperaba