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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  error en tiempo de ejecucion en programa c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: error en tiempo de ejecucion en programa c++  (Leído 5,596 veces)
tca153

Desconectado Desconectado

Mensajes: 10


Ver Perfil
error en tiempo de ejecucion en programa c++
« en: 8 Agosto 2021, 01:37 am »

hola, tengo este ligero problema con una clase que hize, en esta clase tengo un puntero apuntado a la zona de video en modo texto (0xB8000000h) pero cuando trato de leer o escribir en esa direccion me da un error en tiempo de ejecucion (SEGMENTATION FAULT) y hay unos numeros antes que siempre cambian, que sera lo que pasa, yo probe esto en windows y siempre andubo bien, pero aca falla.
Para mas datos estoy usando binicpup 64 bits y el compilador es codelite, y aca esta la clase

#ifndef PANTALLA_H
   #define PANTALLA_H
   #include <iostream>
   
   class PANTALLA
   {
      private:
         int X,Y;
         unsigned char *scr;

      public:
      
         // Constructor
      
         PANTALLA()
         {
            scr=(unsigned char *)0xb8000000;
            X=Y=0;   
            clear();
         }
      
         void clear(void)
         {
            for(int i=1;i<2000;i+=2)
               *(scr+i)=0;      // punto en donde falla sin esto corre bien         
         }
   };

#endif // PANTALLA_H

cualquier ayuda sera muy apreciada, gracias


En línea

BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: error en tiempo de ejecucion en programa c++
« Respuesta #1 en: 8 Agosto 2021, 04:32 am »

hola, tengo este ligero problema con una clase que hize, en esta clase tengo un puntero apuntado a la zona de video en modo texto (0xB8000000h)
¿Eso no era explícitamente hecho para DOS? cada sistema operativo debería de tener su manera apropiada de limpiar la pantalla debido a como manejan la memoria de cada dispositivo...

Para mas datos estoy usando binicpup 64 bits y el compilador es codelite, y aca esta la clase
Perdon por la ignorancia pero ¿que es binicpup? ¿Es BionicPup de PuppyLinux?

Si es una distro moderna de Linux podés hacer lo siguiente en la terminal:
Código
  1. clear | hexdump -C
Luego te va a salir una secuencia de bytes, en mi caso es:
Código:
00000000  1b 5b 48 1b 5b 32 4a 1b  5b 33 4a                 |.[H.[2J.[3J|
0000000b
Al cuál se lo creo un programa en C o C++ da igual y le agrego un cero al final por las dudas:
Código
  1. #include <iostream>
  2.  
  3. int main()
  4. {
  5.    unsigned char bfClearScreen[]=
  6.    {0x1b,0x5b,0x48,0x1b,0x5b,0x32,0x4a,0x1b,0x5b,0x33,0x4a,0x00};
  7.  
  8.    std::cout << bfClearScreen;
  9.    return 0;
  10. }

Y eso al menos a mí me funcionó perfectamente.

Enlace de referencia

GIF de demonstración:



B#


« Última modificación: 8 Agosto 2021, 05:13 am por BloodSharp » En línea



tca153

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: error en tiempo de ejecucion en programa c++
« Respuesta #2 en: 8 Agosto 2021, 14:11 pm »

hola y muchísimas gracias por contestar, primero si la distro que uso es bionicpup 8.0 64bits, es el penúltimo puppy linux y hasta agora el ultimo con la opción de instalar en disco, la versión 9.5 solo viene con instalación frugal, y segundo, si se que puedo utilizar cout para dibujar y borrar, pero la idea es hacer un juego en modo texto que pueda después,  y con obvios retoques, a modo gráfico tal vez algún modo vesa, si no puedo hacerlo en modo texto, ya me puedo ir olvidando de hacerlo en modo gráfico donde voy a tener mas problemas, ojo se que puedo hacerlo usando qt designer o algún otro parecido pero me gusta programar para consola, el otro tema seria la velocidad y las prestaciones, no solo es mas rápido escribir en la pantalla usando un puntero que usando cout, también así puedo escribir un byte único en donde yo quiera dentro de la pantalla sino que también puedo controlar los atributos de cada byte en forma independiente a los demás bytes cosa que es mucho mas difícil con los métodos de la clase std
En línea

RayR

Desconectado Desconectado

Mensajes: 239


Ver Perfil
Re: error en tiempo de ejecucion en programa c++
« Respuesta #3 en: 8 Agosto 2021, 16:26 pm »

Como te dijo BloodSharp , eso es para el viejo DOS. No sirve para sistemas operativos modernos, por muchas razones. Que te funcionara en Windows se explica porque las versiones de 32 bits incluyen (o por lo menos así era antes) una máquina virtual de DOS para los programas de 16 bits, por lo que si el ejecutable fue generado con un compilador de 16 bits, y lo abres en esas versiones de Windows, va a funcionar, aunque de forma emulada, no nativa. Si de todas formas te interesa programar de esa manera por curiosidad, puedes instalar el emulador DOSBox, que tiene versiones para Windows y Linux, pero lo mejor es que simplemente uses funciones específicas del SO.
En línea

tca153

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: error en tiempo de ejecucion en programa c++
« Respuesta #4 en: 8 Agosto 2021, 16:29 pm »

gracias para empezar soy nuevo en linux, a que funciones especificas te referis, y por otra parte, estamos de acuerdo que esa zona de memoria igual que la 0xA0000000, siguen existiendo?, si es asi no hay ninguna manera de romper esa barrera sin dañar al SO?
En línea

BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: error en tiempo de ejecucion en programa c++
« Respuesta #5 en: 8 Agosto 2021, 16:30 pm »

pero la idea es hacer un juego en modo texto que pueda después,  y con obvios retoques, a modo gráfico tal vez algún modo vesa (...) no solo es mas rápido escribir en la pantalla usando un puntero que usando cout, también así puedo escribir un byte único en donde yo quiera dentro de la pantalla sino que también puedo controlar los atributos de cada byte en forma independiente a los demás bytes cosa que es mucho mas difícil con los métodos de la clase std

En GNU/Linux y supongo que varios Unixes existe la librería ncurses la cuál te permite calcular el tamaño de la terminal, escribir y supongo que también se puede leer al igual que borrar casillas:

Página de manual de ncurses

Por si te interesa hace mucho porté un mini juego FPS de Windows a Linux utilizando ncurses

[Aporte] Mini juego laberinto estilo FPS en terminal de Linux


B#
En línea



RayR

Desconectado Desconectado

Mensajes: 239


Ver Perfil
Re: error en tiempo de ejecucion en programa c++
« Respuesta #6 en: 8 Agosto 2021, 21:26 pm »

gracias para empezar soy nuevo en linux, a que funciones especificas te referis, y por otra parte, estamos de acuerdo que esa zona de memoria igual que la 0xA0000000, siguen existiendo?, si es asi no hay ninguna manera de romper esa barrera sin dañar al SO?

Esas direcciones en sí no tienen nada de especial, es simplemente que bajo DOS, ahí se mapeaba la VRAM. Escribir en esas direcciones para modificar los pixeles o caracteres sólo tiene sentido bajo DOS o algún SO compatible, y con la tarjeta de video corriendo en modo EGA, VGA, etc. De todas formas los sistemas modernos usan memoria virtual, por lo que la dirección 0xb8000000 que ve tu programa no se corresponde con la dirección física 0xb8000000 en la RAM. Además, en general no permiten acceder directamente al hardware a los programas normales.

TL;DR: no se puede de esa manera. BloodSharp ya te dio algunas opciones con las que lo podrías hacer.
En línea

tca153

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: error en tiempo de ejecucion en programa c++
« Respuesta #7 en: 9 Agosto 2021, 14:50 pm »

te agradezco la paciencia bloodsharp, tendre que cambiar de planes, una cosa mas, sabras como configurar code blocks para usar ncurses, logro que me detecte la ncurses.h pero no compila
En línea

BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: error en tiempo de ejecucion en programa c++
« Respuesta #8 en: 9 Agosto 2021, 16:37 pm »

te agradezco la paciencia bloodsharp, tendre que cambiar de planes, una cosa mas, sabras como configurar code blocks para usar ncurses, logro que me detecte la ncurses.h pero no compila

Esta imagen la tomé prestada de stackoverflow, por lo que tenés que cambiar gdi32 por ncurses




B#
En línea



tca153

Desconectado Desconectado

Mensajes: 10


Ver Perfil
Re: error en tiempo de ejecucion en programa c++
« Respuesta #9 en: 9 Agosto 2021, 20:59 pm »

muchisimas gracias a los 2, RayR muchas gracias, y para BloodSharp pocas veces en foros vi gente como vos mas interesada en compartir lo que sabe que en criticar por no saber, a los dos un fuerte abrazo, y ahora a programar
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
error 458 en tiempo de ejecucion
Programación Visual Basic
wACtOr 0 3,050 Último mensaje 18 Junio 2007, 16:20 pm
por wACtOr
Ayuda Error 92 en tiempo de Ejecucion
Programación Visual Basic
mastercss 8 6,136 Último mensaje 23 Abril 2014, 14:46 pm
por abkanis
winsock error 10035 en tiempo de ejecucion
Programación Visual Basic
Dark4ngel 3 3,462 Último mensaje 10 Noviembre 2011, 18:12 pm
por Dark4ngel
error en tiempo de ejecución
Programación C/C++
flony 0 1,675 Último mensaje 12 Octubre 2013, 04:24 am
por flony
Error en mi programa en tiempo de ejecución, estoy practicando polimorfimo en C+
Programación C/C++
theluigy13etv 1 2,085 Último mensaje 15 Julio 2015, 18:27 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines