Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-05-2013
jularaXD jularaXD is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 18
Poder: 0
jularaXD Va por buen camino
EAccessViolation al asignar valores a un array

Buenass

Tengo un problema que no entiendo muy bien porque ocurre, pero creo que no es culpa mia...
El problema me lo da este fragmento de código:
Código Delphi [-]
procedure crearmatrizjuego;
var
z,x,c:integer;
begin
c:=1;
x:=0;
z:=0;
while z<16 do
  begin
  z:=z+1;
  while x<4 do
      begin
        x:=x+1;
        fjuego.mjugadores[c,1]:=z;  //Esta línea
        fjuego.mjugadores[c,2]:=x;  //Y esta
        c:=1+c;
      end;
  x:=0;

  end;
end;

Cuando llamo a este procedure me salta el siguiente error:
Código:
Project parchis.exe reaised exception class EAccessViolation with message 'Access violation at adress 0041D6B7 in module 'parchis.exe'. Read of adress 0000000F' Process stoped.
El problema esta en la variable "c" para asignar el número de fila de la matriz, ya que he ido sustituyendo las variables por numeros y allí he encontrado el fallo. Pero porque me da ese error?


PD: Otra preguntita que tengo, es que cuando creo procedures manualmente, que los uso para llamarlos por ejemplo desde un boton, tengo que asignar siempre el formulario con el que estoy trabajando, por ejemplo, si quiero cambiar el texto de un panel, en vez de poner panel1.caption:= me obliga a escribir form1.panel1.caption:=.
Hay alguna manera de decirle que todo lo de ese procedure esta en el form1?


Saludos y gracias de antemano!!
Responder Con Cita
  #2  
Antiguo 13-05-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jularaXD.

Con seguridad no has creado una instancia de fjuego antes de usarla en la función crearmatrizjuego.

Algo como:
Código Delphi [-]
var
  FJuego : TFJuego; // (o como se llame tu clase)
begin
  fjuego := TFjuego.Create;
  crearmatrizjuego;
  ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 13-05-2013
jularaXD jularaXD is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 18
Poder: 0
jularaXD Va por buen camino
El procedimiento lo llamo desde un boton del fjuego, y si cambio las variables por numeros entonces si funciona perfectamente, asi que supongo que ese form ya esta creado, no?
Responder Con Cita
  #4  
Antiguo 13-05-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por jularaXD Ver Mensaje
El procedimiento lo llamo desde un boton del fjuego, y si cambio las variables por numeros entonces si funciona perfectamente, asi que supongo que ese form ya esta creado, no?
Hola.

Obviamente que si fjuego es el form y estas llamando al procedimiento dentro de él ya está creado, al igual que mjugadores si es atributo del mismo. Pero sin ver las declaraciónes en tu código, era imposible saber a que clase pertenecía el objeto fjuego.

¿ Cuál es la declaración del arreglo bidimensional ? Veo que no estas controlando el valor final de la variable c dentro del while anidado y bién podría exeder el valor máximo declarado en él.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 13-05-2013
jularaXD jularaXD is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 18
Poder: 0
jularaXD Va por buen camino
A ver si he entendido lo que me pides xD

La array mjugadores la declaro en private de esta manera
Código Delphi [-]
private
mjugadores:array[1..16,1..2] of integer;

Lo que quiero hacer es que me cree esta array:

[1, 1]
[1, 2]
[1, 3]
[1, 4]
[2, 1]
[2, 2]
[2, 3]
[2, 4]
[3, 1]
[.. ..]
[.. ..]
[4, 4]

También he intentado limitar el valor de C y me sigue dando el mismo error.

salu2
Responder Con Cita
  #6  
Antiguo 14-05-2013
jularaXD jularaXD is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 18
Poder: 0
jularaXD Va por buen camino
Ei, me acabo de enterar que no falla al crear la array, sino luego al leerla o al cerrar la aplicacion.
Subo este proyecto que se puede ver perfectamente el error.


saludos!
Archivos Adjuntos
Tipo de Archivo: rar delphi.rar (6,4 KB, 0 visitas)
Responder Con Cita
  #7  
Antiguo 14-05-2013
jularaXD jularaXD is offline
Miembro
NULL
 
Registrado: may 2013
Posts: 18
Poder: 0
jularaXD Va por buen camino
Ya esta, he conseguido solucionar el problema.
Había escrito mal el codigo, puesto que una matriz que tenía tan solo 16 filas, y el bucle le ponía valores hasta la fila 64 o algo asi...

Bueno, muchas gracias por tu tiempo ecfisa y disculpa si no me he explicado correctamente en algun momento
Responder Con Cita
  #8  
Antiguo 14-05-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por jularaXD Ver Mensaje
La array mjugadores la declaro en private de esta manera

Lo que quiero hacer es que me cree esta array:

[1, 1]
[1, 2]
[1, 3]
[1, 4]
[2, 1]
[2, 2]
[2, 3]
[2, 4]
[3, 1]
[.. ..]
[.. ..]
[4, 4]

...
Correcto, entiendo esa parte, pero ¿ Podrías poner el ejemplo de la sucesión de valores que deseas asignar en cada posición de la matriz ?

Es decir:
Código:
[1,1] = 0
[1,2] = 1
...
[n,m] = x
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 14-05-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por jularaXD Ver Mensaje
Ya esta, he conseguido solucionar el problema.
Había escrito mal el codigo, puesto que una matriz que tenía tan solo 16 filas, y el bucle le ponía valores hasta la fila 64 o algo asi...
A eso me refería con el valor que alcanzaba la variable c, me alegro que lo solucionaras

No había visto tu último mensaje, y te consultaba sobre los valores que había que asignar a la matriz, por que generalmente es mas simple cargar la matriz con dos for, por ejemplo:
Código Delphi [-]
var
  c,f: Integer;
begin
  for c:= 1 to 2 do
    for f:= 1 to 16 do
      mjugadores[f,c] := ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 14-05-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 21
ozsWizzard Va por buen camino
Cita:
Empezado por jularaXD Ver Mensaje
pero creo que no es culpa mia...
Un consejo, esta forma de pensar suele llevar a que sea muy difícil encontrar los errores, en mucho más de un 90% de ocasiones, la culpa es del programador, ya sea por algo que ha hecho mal o por algo que no ha entendido bien o lo que sea. De hecho, incluso alguna veces que se cree que es un bug del IDE, es error del programador pero que no ha sido capaz de interpretar bien el error.

Mi consejo es que pienses, de primeras, que el error es casi seguro tuyo.


Cita:
Empezado por jularaXD Ver Mensaje
PD: Otra preguntita que tengo, es que cuando creo procedures manualmente, que los uso para llamarlos por ejemplo desde un boton, tengo que asignar siempre el formulario con el que estoy trabajando, por ejemplo, si quiero cambiar el texto de un panel, en vez de poner panel1.caption:= me obliga a escribir form1.panel1.caption:=.
Hay alguna manera de decirle que todo lo de ese procedure esta en el form1?


Saludos y gracias de antemano!!

Para que un procedimiento sea del formulario, no basta con que esté en la misma unidad, deberías declarar el procedimiento de esta forma

Código Delphi [-]
procedure Tfjuego.crearmatrizjuego;
var
z,x,c:integer;
begin
c:=1;
x:=0;
z:=0;
while z<16 do
  begin
  z:=z+1;
  while x<4 do
      begin
        x:=x+1;
        mjugadores[c,1]:=z;  //Esta línea
        mjugadores[c,2]:=x;  //Y esta
        c:=1+c;
      end;
  x:=0;

  end;
end;

Si te fijas, ya no tengo que poner el nombre del formulario cuando se usa mjugadores. De esta forma, además, te sirve para cualquier variable y no sólo la variable fjuego.
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #11  
Antiguo 14-05-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 21
ozsWizzard Va por buen camino
He simplificado mucho me temo.

La declaración del procedimiento ha de ir dentro de la sección public (o private, según de donde se llame) del formulario. (hablo de las secciones que viene por defecto)
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
Respuesta



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
Problema al asignar valor a array ferjavrec2 OOP 6 06-03-2011 22:14:33
Asignar 'array property' con record.elemento yapt OOP 6 13-05-2010 21:16:05
Cómo asignar valores a una variable tipo Array quinqui OOP 7 23-06-2006 15:59:17
Como Asignar Variable Tipo Array de Tform a otro Array del Mismo tipo morfeo21 Varios 5 17-08-2004 17:39:51
asignar valores por default NickName Firebird e Interbase 3 14-09-2003 12:01:43


La franja horaria es GMT +2. Ahora son las 21:01:47.


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