Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Access violation (Invalid pointer operation) (https://www.clubdelphi.com/foros/showthread.php?t=76249)

alej.villa 19-10-2011 01:30:50

Access violation (Invalid pointer operation)
 
1 Archivos Adjunto(s)
Buenas noches amigos foreros

Si este hilo no va en esta ubicacion les pido disculpas puesto que no sabia donde abrirlo.

Esta vez es una error muy raro que aparece en mi aplicacion cuando esta ejecutando una serie de bloques de codigos,

veran una breve explicacion para que sepan que hago en esos bloques de codigos.

1. Realizo un query que me selecciona solo la cedula del empleado segun su turno de trabajo (que lo paso por parametro), luego el resultado de la consulta la guardo en un arreglo dinamico string.
2. tengo un ciclo while en donde realizo lo siguiente:
2.1 pasar una cedula (del arreglo anteriormente nombrado) de manera aleatoria a un nuevo arreglo dinamico string
e.j.
Código Delphi [-]
cedula[i] := RandomFrom (miArreglo)
2.2 Comparo que la cedula que pase del primer arreglo al segundo no este la persona de permiso, reposo, vacaciones, etc.
2.3 si pasan la condicion anterior comparo que esa misma cedula (que seria el empleado) no tenga limitaciones de trabajo, es decir, que pueda trabajar en cualquier area.
2.4 verifico que esa cedula no haya pasado en unas areas especificas en donde pueden entrar una sola vez por semana.
2.5 si pasan todas las condiciones anteriormente nombradas las registro en la base de datos en donde le asigno una posicion para trabajar.

hasta aqui todo bien, el programa funciona perfecto.

El problema es que si tengo 29 personas en el query, cuando registra 22 personas me sale ese error de invalid pointer operation o access violation, y la verdad es que no lo entiendo.

Espero puedan ayudarme o brindarme alguna informacion valiosa, ya busque en nuestro amigo google pero nada.

adjunto una foto para ver si ustedes entienden esto.

ecfisa 19-10-2011 01:49:16

Hola alej.villa

Para dar una respuesta totalmente válida habría que ver el código, pero igual voy a apostar una ficha...:rolleyes:

Cuando realizas la carga:
Código Delphi [-]
  cedula[i] := RandomFrom (miArreglo);
¿ Revisaste que la variable 'i' comienze en la posición 0 del array ?

Es decir, algo como esto te daría un error de access violation:
Código Delphi [-]
var
  a: array of integer;
begin
  for i:= 1 to 29 do
  begin
    SetLength(a, Length(a)+1);
    a[i]:= i;   //  ¡¡¡ Incorrecto !!! debería ser: a[i-1]:= i;
  end;
end;

Un saludo.

alej.villa 19-10-2011 01:52:25

Cita:

Empezado por ecfisa (Mensaje 416103)
Hola alej.villa

Para dar una respuesta totalmente válida, habría que ver el código, pero igual voy a apostar una ficha...:)

Cuando realizas la carga:
Código Delphi [-] cedula[i] := RandomFrom (miArreglo);

¿ Revisaste que la variable 'i' comienze en la posición 0 del array ?

Es decir, algo como esto te daría un error de access violation:
Código Delphi [-]var a: array of integer; begin for i:= 1 to 29 do begin SetLength(a, Length(a)+1); a[i]:= i; // ¡¡¡ Incorrecto !!! debería ser: a[i-1]:= i; end; end;


Un saludo.

Hola ecfisa

La verdad es que cuando hago la carga de un arreglo a otro lo hago en un ciclo while y la variable la inicializo en 1 y no hago la resta como tu indicas sino que comienza a cargar a partir de la posicion 1.

Gracias por tu comentario voy a revisar esa parte y comento a ver como me va ;)

alej.villa 19-10-2011 02:22:12

Nada
 
1 Archivos Adjunto(s)
ecfisa arregle la parte que me dijiste y la verdad es que me agrega mas personas, es decir, con 29 cedulas disponibles de agregaba solo 22 max y me daba el error, ahora con 29 cedulas disponibles me agrega 26 pero me sigue saliendo el error, de invalid pointer operation :confused:

aqui una imagen para que veas

ecfisa 19-10-2011 03:00:17

Lo siento alej.villa, pero no alcanza con la imágen para poder ubicar el error.

La intención de mi mensaje anterior, fué ejemplificar uno de los casos que podrían provocar un error Access violation en un array dinámico pero pueden existir otros, incluso sin relación con él.
Una opción es poner algún break antes de donde sospeches que se puede estar dando el error y usar Trace Into (F7) para hacer un seguimiento línea a línea.
Si aún así no logras descubrir el error te reitero, vamos a tener que ver algo de código...

Un saludo.:)


La franja horaria es GMT +2. Ahora son las 21:23:28.

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