Cita:
Posteado originalmente por Ruben_Cu
¿Como es posible que en ocasiones el compilador lo ve bien y en otras no?
|
Supongo que depende del segmento de memoria en donde se coloque la variable.
Voy a especular porque yo de esto no sé nada:
[especular]
Dependiendo de donde se declare la variable ésta se colocará en distintos segmentos de memoria. Algunas se colocan en el segmento de código (CODE segment) de manera que al escribir en una dirección que no nos corresponde se genera el "Access Violation" al intentar escribir sobre la parte de memoria donde se pone el código cuando el programa se carga en memoria.
En otras ocasiones se colocara en un segmento especial para datos (DATA segment) y, si no hay nada contiguo y se trata de un área que el manejador de memoria de Delphi ya reservó pues no pasará nada grave.
[/especular]
Aquí te pongo una prueba rápida que hice:
Inmediatamente después de la declaración del formulario declara lo siguiente:
Código:
var
Form1: TForm1;
Fichas: array[1..5] of Integer;
Prueba: Integer;
En algún lugar ejecuta la instrucción:
Código:
I := 6;
Fichas[i] := 84;
Caption := IntToStr(Prueba);
¿Qué crees que apareció en la barra de título del formulario?
84
Suena lógico ¿no?
Ficha[6] accedió a la parte de la memoria inmediatamente después del arreglo Fichas. Y ahí estaba la variable Prueba.
No causa error pues es sólo el valor de una variable que se afecta pero desde luego ¡está mal!
No es que el compilador a veces marque errores y a veces no. Es que depende de muchas circunstancias, de qué código tengamos.
El ejemplo anterior muestra que no veremos ningún error pero cuando nuestro programa muestre cosas raras por la alteración del valor de la variable Prueba, pasaremos ratos difícilies (¿estimulantes?) intentando encontrar la falla.
Por eso, repito, debemos ajustarnos a la programación correcta pues no tiene caso intentar averiguar de qué manera está funcionando el compilador.
// Saludos