Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-03-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 14
danielmj Va por buen camino
Hola estoy teniendo problemas con el ordenador (posiblemente placa) l lo digo por si veis que no contesto a vuestros mensajes, que es por ese motivo.
tsk voy a probar lo que comentas. Gracias.

edito: He probado lo de FillByte y sigue dando el mismo error.. sigo investigando.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.

Última edición por danielmj fecha: 31-03-2018 a las 15:44:45.
Responder Con Cita
  #2  
Antiguo 01-04-2018
tsk tsk is offline
Miembro
 
Registrado: dic 2017
Posts: 54
Poder: 7
tsk Va por buen camino
Acabo de ver tu video, y el error que te marca es por intentar acceder a una región de memoria inválida, y el error está cuando invocas la función FillByte.

Hice lo siguiente para hacer unas pruebas, y a pesar de compilar, presenta unos errores.

Código:
program Main;

type
    TArrayBool = array[0..0] of boolean;
    PArrayBool = ^TArrayBool;

var 
    Lista : PArrayBool;    
begin
    Getmem(Lista,1 + 10*SizeOf(Boolean));
    writeln(Lista^[0]);
    FillByte(Lista,1+10*SizeOf(Boolean),0);
    writeln(Lista^[1]);
    writeln(Lista^[3]);
    Lista^[3] := TRUE;
    writeln(Lista^[3]);
    writeln(Lista^[10]);
    writeln(Lista^[11]);
    writeln(Lista^[12]);
    writeln(Lista^[13]);
    FreeMem(Lista,1 + 10*SizeOf(Boolean));
    writeln('Test');
end.
Código:
 fpc main.pas
Free Pascal Compiler version 3.0.0 [2015/12/05] for x86_64
Copyright (c) 1993-2015 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling main.pas
main.pas(13,20) Warning: range check error while evaluating constants (1 must be between 0 and 0)
main.pas(14,20) Warning: range check error while evaluating constants (3 must be between 0 and 0)
main.pas(15,12) Warning: range check error while evaluating constants (3 must be between 0 and 0)
main.pas(16,20) Warning: range check error while evaluating constants (3 must be between 0 and 0)
main.pas(17,20) Warning: range check error while evaluating constants (10 must be between 0 and 0)
main.pas(18,20) Warning: range check error while evaluating constants (11 must be between 0 and 0)
main.pas(19,20) Warning: range check error while evaluating constants (12 must be between 0 and 0)
main.pas(20,20) Warning: range check error while evaluating constants (13 must be between 0 and 0)
Linking main
/usr/bin/ld: aviso: link.res contiene secciones de salida. ¿Olvidó -T?
23 lines compiled, 0.4 sec
8 warning(s) issued
Si lo ejecuto, obtengo el mismo error que tu, al invocar la función FillByte

Código:
$ ./main
TRUE
Runtime error 216 at $0000000000400252
  $0000000000400252
  $000000000040018F
Pero si lo comentamos y compilamos de nuevo, no se observa el error, pero lo que no me cuadra el es hecho que se puede acceder a regiones de memoria que no se encuentran dentro de los límites que se especificaron en GetMem

Código:
$ ./main
TRUE
FALSE
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
Test
Le hice algunos cambios, también debes notar que hay dos funciones, GetMem y Getmem. GetMem es una función que retorna un puntero hacia el espacio de memoria reservado y lo puedes ver en el siguiente código como Lista := GetMem(....). Y Getmem funciona como el GetMem del Delphi.

También puedes observar que en FillByte cambién FillByte(Lista,1+10*SizeOf(Boolean),0) por FillByte(Lista^,1+10*SizeOf(Boolean),0), es ahí donde te marcaba el error 216.

Código:
program Main;

type
    TArrayBool = array[0..0] of boolean;
    PArrayBool = ^TArrayBool;

var 
    Lista : PArrayBool;    
begin
    //Lista := GetMem(1 + 10*SizeOf(Boolean));
    Getmem(Lista,1 + 10*SizeOf(Boolean));
    writeln(Lista^[0]);
    writeln(Lista^[1]);
    writeln(Lista^[2]);
    FillByte(Lista^,1+10*SizeOf(Boolean),0);
    writeln(Lista^[0]);
    writeln(Lista^[1]);
    writeln(Lista^[2]);
    writeln(Lista^[10]);
    writeln(Lista^[11]);
    writeln(Lista^[12]);
    writeln(Lista^[13]);
    FreeMem(Lista,1 + 10*SizeOf(Boolean));
    writeln('Test');
end.
Salida
Código:
$ ./main
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
FALSE
Test
Como vez, puso todo a 0, y para comprobar que sólo se inicializan los valores correspondientes, modifico FillByte de 0 a 1

Código:
program Main;

type
    TArrayBool = array[0..0] of boolean;
    PArrayBool = ^TArrayBool;

var 
    Lista : PArrayBool;    
begin
    //Lista := GetMem(1 + 10*SizeOf(Boolean));
    Getmem(Lista,1 + 10*SizeOf(Boolean));
    writeln(Lista^[0]);
    writeln(Lista^[1]);
    writeln(Lista^[2]);
    FillByte(Lista^,1+10*SizeOf(Boolean),1);
    writeln(Lista^[0]);
    writeln(Lista^[1]);
    writeln(Lista^[2]);
    writeln(Lista^[10]);
    writeln(Lista^[11]);
    writeln(Lista^[12]);
    writeln(Lista^[13]);
    FreeMem(Lista,1 + 10*SizeOf(Boolean));
    writeln('Test');
end.
Salida

Código:
$ ./main
TRUE
TRUE
TRUE
TRUE
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
Test
Responder Con Cita
  #3  
Antiguo 07-04-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 14
danielmj Va por buen camino
Hola de nuevo, he tenido una semana liado con el pc, pensaba que era cosa de placa pero era la fuente.
Vuelvo a retomar el trabajo y ahora si funciona tsk. Gracias.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #4  
Antiguo 07-04-2018
Avatar de danielmj
danielmj danielmj is offline
Miembro
 
Registrado: jun 2011
Posts: 383
Poder: 14
danielmj Va por buen camino
Buenos dias, he probado lo que dices tsk y me encuentro con que la unidad UTAlea encargada de generar números aleatorios, repite los números cosa que antes de implementarla para lazarus no hacía. Adjunto dos unidades (en delphi y en lazarus) para que veas, veais las diferencias que son mínimas.
Mientras la versión para delphi lo hace perfectamente, incluir la linea
Código:
FillByte(Lista^,1+10*SizeOf(Boolean),0);
hace que los números salgan repetidos.

Delphi
Lazarus

Al subir uno de los archivos al servidor ftp no me di cuenta y lo subí sin asignar una carpeta adecuada, se subió a la raiz. Que algún administrador lo borre. Sorry.

Captura de repetición de númeos aleatorios

Un saludo.
__________________
La juventud pasa, la inmadurez se supera, la ignorancia se cura con la educación, y la embriaguez con la sobriedad, pero la estupidez dura para siempre. Aristofanes.
Responder Con Cita
  #5  
Antiguo 10-04-2018
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Veo que has cambiado "Maximo" por " 10*SizeOf(Boolean)" en algunos sitio. ¿Por qué razón? Aunque la verdad es que no sé si tiene que ver con que se repitan números.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #6  
Antiguo 11-04-2018
tsk tsk is offline
Miembro
 
Registrado: dic 2017
Posts: 54
Poder: 7
tsk Va por buen camino
Si debería ser Maximo*SizeOf(Boolean).

Aunque no creo que FillByte sea el que cause los números repetidos, ya que lo único que hace es poner los el arreglo a 0. Eso debe estar en otra parte del código. En un rato hago otras pruebas para descartar que se pudieran sobre escribir sectores de memoria que pudiera interferir, aunque no lo creo.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Meetup #3 - Migrar Un componente de Lazarus a Delphi Starter egostar La Taberna 1 20-07-2017 23:11:17
problemas al migrar aplicacion lazarus windows a lazarus linux anubis Linux 5 08-11-2016 15:41:58
Migrar Aplicacion Lazarus De Ubuntu A Windows volv87 Lazarus, FreePascal, Kylix, etc. 4 26-07-2007 08:03:07
Migrar aplicacion Delphi triskel Windows 1 10-05-2005 13:26:04
migrar una aplicacion alfgonvar Varios 2 04-07-2003 18:15:24


La franja horaria es GMT +2. Ahora son las 23:41:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi