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