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

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Está comiendo memoria mi compilador?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Está comiendo memoria mi compilador?  (Leído 1,674 veces)
furciorifa

Desconectado Desconectado

Mensajes: 94


Ver Perfil
¿Está comiendo memoria mi compilador?
« en: 3 Febrero 2016, 06:23 am »

Hola a todos resulta que estaba dando clases de programación en C, pero nunca me había pasado esto, a la hora de explicar que un arreglo declarado como
Código
  1. arreglo[5]={1,2,3,4,5};
se asignaban 5 enteros al arreglo y no más y que la siguiente sentencia no podía ser válida

Código
  1. a[5]=6;
ya que estabas desbordando el arreglo,

en fin para no alargar las cosas más, hice esa asignación y corrí el siguiente código
Código
  1. #include<stdio.h>
  2.  
  3. int main(){
  4.                int i;
  5.  
  6.                int a[5]={1,2,3,4,5};
  7.  
  8.                a[5]=6;
  9.  
  10.                for(i=0;i<=5;i++){
  11.                        printf("%d\n",a[i]);
  12.                }
  13.                return 0;
  14.        }
  15.  
  16.  
  17.  
  18.  
  19.  

Resulta que compila sin errores e incluso corre, me salió el tiro por la culata a la hora de dar clases pues estaba cometiendo una equivocacíon y contradicción enorme en caso de que mi compilador fallase o yo mismo haya caído en algún fallo.



Resulta que lo corrí en la máquina de un alumno con otro compilador y me arrojaba el error que yo quería demostrar en clase, habrá algún modo de saber si es correcto o incorrecto? o tendré que reinstalar gcc?


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: ¿Está comiendo memoria mi compilador?
« Respuesta #1 en: 3 Febrero 2016, 06:59 am »

C no controla los límites de los arrays y deja escribir en cualquier parte de la memoria, deja esa tarea al programador; parte de su velocidad viene de que no realiza estos chequeos.
Ahora bien, puede haber compiladores que hagan esta comprobación,  pero esto ya es funcionalidad añadida.
El sistema operativo también será tu perro guardián impidiendo que puedasbescribir en zonas de memoria diferentes a la memoria dedatos que ha asignado a tu programa.


En línea

Orubatosu


Desconectado Desconectado

Mensajes: 2.515


Ver Perfil WWW
Re: ¿Está comiendo memoria mi compilador?
« Respuesta #2 en: 3 Febrero 2016, 10:13 am »

Como te han comentado, C y C++ no comprueban que escribes o intentas leer fuera de un rango. Las consecuencias de hacerlo pueden ser inocuas o el cuelgue del programa.

Hay que ser especialmente cuidadoso en estos temas, porque si escribes fuera de rango puedes sobreescribir un valor de otra variable, haciendo la depuración bastante mas compleja cuando el programa "no funciona como debe".

Esto en algunas estructuras de datos de C++ se soluciona usando iteradores, que son una seguridad adicional, pero es el programador quien debe en todo momento cuidarse de no leer o escribir "donde no debe", no el compilador
En línea

"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con bots que me esta comiendo los sesos xD [Counter Strike]
Juegos y Consolas
Jo$$ 3 1,796 Último mensaje 2 Enero 2007, 02:18 am
por SICKBOY
dónde está la memoria de mi PC? « 1 2 »
Hardware
34danis 10 8,700 Último mensaje 21 Septiembre 2010, 23:31 pm
por MasterPunk
Esta es un buena tarjeta de memoria?
Electrónica
admcasal 1 3,803 Último mensaje 27 Abril 2011, 02:13 am
por simorg
Condena por una foto de Facebook comiendo cerdo en el ramadán
Noticias
wolfbcn 0 1,185 Último mensaje 19 Julio 2013, 02:15 am
por wolfbcn
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines