Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error Access violation at address 00404CE8 in module (https://www.clubdelphi.com/foros/showthread.php?t=66855)

bothy 16-03-2010 01:38:39

Error Access violation at address 00404CE8 in module
 
yo tambien tengo algo parecido

tengo un VclFormPrincipal con 1 button que este button al dar click te desplega un form,
que este form a su vez tiene 3 button cada button te desplega a a un form diferente a si que tengo otros 3 forms.


Código Delphi [-]
procedure Tfromprincipal.SpeedButton1Click(Sender: TObject);
begin
fromninos.ShowModal ;
end;
procedure Tfromprincipal.SpeedButton1Click(Sender: TObject);
begin
mediaplayer1.Stop ;
fromninos.ShowModal ;

end;

procedure Tfromprincipal.SpeedButton4Click(Sender: TObject);
begin
if Application.MessageBox( '¿Desea salir?', 'Catalogo Principal',
  MB_ICONQUESTION OR MB_YESNO ) = ID_YES then
close;
end;


end.



"este vclformprincipal te despliega otro form donde tengo tres button"




Código Delphi [-]
procedure Tfromninos.SpeedButton1Click(Sender: TObject);
begin

formuno.ShowModal ;
close;
end;

procedure Tfromninos.SpeedButton2Click(Sender: TObject);
begin
form2.ShowModal ;
close;
end;

procedure Tfromninos.SpeedButton3Click(Sender: TObject);
begin
form3.ShowModal ;
close;
end;

end.

El formuno y dos tengo esto
Código Delphi [-]
var   vector:array[1..4]of integer;
  fromcinco6: Tfromcinco6;

implementation

uses principal;

{$R *.dfm}





procedure Tfromcinco6.FormCreate(Sender: TObject);
var i:integer;
begin
Randomize;
 for i:=0 to 3 do
  begin
    vector[i] := RandomRange(1,9);
    label2.Caption :=inttostr (vector[1]);
    label3.Caption :=inttostr (vector[2]);
  end;
end;
procedure Tfromcinco6.Image2Click(Sender: TObject);
begin
      if Application.MessageBox( '¿Desea ir Atras?', 'Catalogo Niños',
          MB_ICONQUESTION OR MB_YESNO ) = ID_YES then
      close;
end;
procedure Tfromcinco6.SpeedButton1Click(Sender: TObject);
var a:integer;
begin
  a:=strtoint(label2.Caption )+strtoint(label3.Caption );
      if edit1.Text =inttostr(a) then
      begin
         label4.Caption :='Muy Bien' ;
         SpeedButton1.Enabled :=false ;
         label6.Caption :='';
      end
      else
         label6.Caption := '! Vuelbe a Intentarlo ¡ ';
         edit1.SetFocus ;
         edit1.Clear ;
end;
procedure Tfromcinco6.SpeedButton2Click(Sender: TObject);
var i:integer;
begin
  label4.Caption :='';
  label6.Caption :='';
  SpeedButton1.Enabled :=true ;
Randomize;
 for i:=0 to 3 do
   begin
    vector[i] := RandomRange(1,9);
    label2.Caption :=inttostr (vector[1]);
    label3.Caption :=inttostr (vector[2]);
   end;

end;
end.
en el form3 tengo
Código Delphi [-]
var  vector:array[1..16]of integer;
  fromninos7: Tfromninos7;

implementation

{$R *.dfm}

procedure Tfromninos7.FormCreate(Sender: TObject);
var i:integer;
begin
Randomize;
  for i:=0 to 15 do
     begin
       vector[i] := RandomRange(10,99);
       label1.Caption :=inttostr (vector[1]);
       label2.Caption :=inttostr (vector[2]);
       label3.Caption :=inttostr (vector[3]);
       label4.Caption :=inttostr (vector[4]);
       label5.Caption :=inttostr (vector[5]);
       label6.Caption :=inttostr (vector[6]);
       label7.Caption :=inttostr (vector[7]);
       label8.Caption :=inttostr (vector[8]);
       label9.Caption :=inttostr (vector[9]);
       label10.Caption :=inttostr (vector[10]);
  end;
end;
procedure Tfromninos7.Image2Click(Sender: TObject);
begin
   if Application.MessageBox( '¿Desea ir Atras?', 'Catalogo Niños',
   MB_ICONQUESTION OR MB_YESNO ) = ID_YES then
 close;
end;
procedure Tfromninos7.SpeedButton1Click(Sender: TObject);
var a,b,c,d,e,g,h,j,k,l,p,calf:integer;
begin
  SpeedButton1.Enabled :=false;
  a:=strtoint(label1.Caption )+strtoint(label2.Caption );
  b:=strtoint(label3.Caption )+strtoint(label4.Caption );
  c:=strtoint(label5.Caption )+strtoint(label6.Caption );
  d:=strtoint(label7.Caption )+strtoint(label8.Caption );
  e:=strtoint(label9.Caption )+strtoint(label10.Caption );
  if edit1.Text =inttostr(a) then
    begin
      label16.Caption :='Bien' ;
      g:=1;
    end  else
     label16.Caption := 'Mal ';

  if edit2.Text =inttostr(b) then
  begin
      label17.Caption :='Bien' ;
      h:=1;
  end  else
     label17.Caption := 'Mal ';
  if edit3.Text =inttostr(c) then
  begin
      label18.Caption :='Bien' ;
      j:=1;
  end  else
     label18.Caption := 'Mal ';

  if edit4.Text =inttostr(d) then
  begin
      label19.Caption :='Bien' ;
      k:=1;
  end  else
     label19.Caption := 'Mal ';


  if edit5.Text =inttostr(e) then
  begin
      label20.Caption :='Bien' ;
      l:=1;
  end  else
     label20.Caption := 'Mal ';
             p:=g+h+j+k+l;
        label24.Caption :=inttostr(p);
        calf:=p*2;
        label27.Caption :=inttostr(calf);
        label25.Caption :=inttostr(5-p);
        edit1.SetFocus ;
end;
procedure Tfromninos7.SpeedButton2Click(Sender: TObject);
var i,l:integer;
begin
  {for l:= 0 to controlCount - 1 do
               begin
                 if(controls[l] is tedit) then
                  tedit(controls[l]).Text :='';
               end;}
SpeedButton1.Enabled :=true ;
Randomize;
 for i:=0 to 15 do
  begin
   vector[i] := RandomRange(10,99);
   label1.Caption :=inttostr (vector[1]);
    label2.Caption :=inttostr (vector[2]);
   label3.Caption :=inttostr (vector[3]);
    label4.Caption :=inttostr (vector[4]);
   label5.Caption :=inttostr (vector[5]);
    label6.Caption :=inttostr (vector[6]);
   label7.Caption :=inttostr (vector[7]);
    label8.Caption :=inttostr (vector[8]);
    label9.Caption :=inttostr (vector[9]);
    label10.Caption :=inttostr (vector[10]);
  end;
   
end;


end.


Entoces todo parese estar bien , pero cuando lo ejecuto y doy click en el button del vclprincipal me despliega el otro form , en ese form le doy click al button1 y me despliega otro form cierro ese form que me despliega y buelvo a dar click en el button2 y me despliega otro form lo cierro y al aplastar otra ves el button1 me sale este error


"project principal2.exe raised exception class EAccessViolation with message 'Access violation
at address 00404CE8 in module 'principal2.exe '.read of address 00000042'".


Este error no me sale si nomas abro y cierro los forms . me sale cuando abro un form y empiezo a utilizar sus funciones. sus funciones son sumas y restas y funciona exelente, pero cuando lo cierro y quiero abrir otro form me sale el error..

Noce si me puedas entender por la esplicacion que te doy . pero se que me puedes ayudar

Caral 16-03-2010 02:03:15

Hola
No entiendo y no creo que ayude mucho tampoco pero por lo que comentas y trato de entender el problema se da al repetir el uso de un botón el que contiene una operaciones, creo.
Me da la impresión de que podría haber alguna variable o dato que no se regenera o toda el valor inicial y al re-llamarlo el valor no esta correcto.
Como dije, no se, solo trato de abrir posibilidades.
Saludos

bothy 16-03-2010 02:10:45

caral muchas gracias..

creo que me equivoque en esto

Código Delphi [-]
procedure Tfromprincipal.SpeedButton1Click(Sender: TObject);
begin
fromninos.ShowModal ;
end;
procedure Tfromprincipal.SpeedButton1Click(Sender: TObject);
begin
mediaplayer1.Stop ;
fromninos.ShowModal ;

end;

procedure Tfromprincipal.SpeedButton4Click(Sender: TObject);
begin
if Application.MessageBox( '¿Desea salir?', 'Catalogo Principal',
  MB_ICONQUESTION OR MB_YESNO ) = ID_YES then
close;
end;


end.
deveria ser asi
Código Delphi [-]
procedure Tfromprincipal.SpeedButton1Click(Sender: TObject);
begin
fromninos.ShowModal ;
end;


procedure Tfromprincipal.SpeedButton4Click(Sender: TObject);
begin
if Application.MessageBox( '¿Desea salir?', 'Catalogo Principal',
  MB_ICONQUESTION OR MB_YESNO ) = ID_YES then
close;
end;


end.

Caral 16-03-2010 02:14:38

Hola
Que poco observador soy.
Efectivamente duplicabas el procedimiento:
Código Delphi [-]
procedure Tfromprincipal.SpeedButton1Click(Sender: TObject);
Que bueno que lo solucionaras y lo mejor, solo.
Saludos

bothy 16-03-2010 02:24:06

Hola de nuevo caral.

no creo que solucione el error yo solo porque noce de que se trata el error que me sale
"project principal2.exe raised exception class EAccessViolation with message 'Access violation
at address 00404CE8 in module 'principal2.exe '.read of address 00000042'" .

poreso les pido porfavor su ayuda .

Caral 16-03-2010 02:27:37

Hola
Ah!, pensé que lo habías solucionado.
Es un error de compilación (creo), normalmente sale cuando esta fuera de lugar, no coincide o cosas asi.
Es muy dificil ver un error de estos sin tener el codigo y compilarlo.
Has probado depurar con F7 o F8 ?
Saludos

bothy 16-03-2010 03:11:00

Hola de nuevo

he compilado con F7 .
paso por paso , lo que ise fue di click en un button1 y utilice las funciones de ese form que es sumar luego cerre el form y di click en el button2 y utilice las funciones de ese form que es sumar luego cerre y le di click al button1
de nuevo y me salio el error

"project principal2.exe raised exception class EAccessViolation with message 'Access violation
at address 00404CE8 in module 'principal2.exe '.read of address 00000042'"

y el compilador me lo marco en
Código Delphi [-]
procedure Tfromninos.SpeedButton1Click(Sender: TObject);
begin

fromcinco6.ShowModal ;
close;
end;

procedure Tfromninos.SpeedButton2Click(Sender: TObject);
begin
// AQUI EL ERROR
fromcinco6.ShowModal ;
close;
end;

procedure Tfromninos.SpeedButton3Click(Sender: TObject);
begin
fromninos7.ShowModal ;
close;
end;

yo pienso que es algo como lo que me dijiste que no se restablece un form o una variable..

Caral 16-03-2010 12:55:47

Hola
Prueba esto:
Código Delphi [-]
procedure Tfromninos.SpeedButton1Click(Sender: TObject);
begin
fromcinco6.ShowModal ;
end;

procedure Tfromninos.SpeedButton2Click(Sender: TObject);
begin
fromcinco6.ShowModal ;
end;

procedure Tfromninos.SpeedButton3Click(Sender: TObject);
begin
fromninos7.ShowModal ;
end;
Saludos

BrunoBsso 16-03-2010 16:51:58

Caral, eso mismo le dije yo en un mensaje privado dónde me preguntó lo mismo de este hilo.
Me parece que no le sirvió porque no me respondió y encima armó este hilo.

Caral 16-03-2010 17:01:28

Hola
Aveces nos ahogamos, no sabemos por que no salen las cosas y si encima somos jóvenes y con poca experiencia en programación, nos desesperamos, lo digo por experiencia (por supuesto no por lo de joven:D).
Siempre trato de ponerme en los zapatos de los otros y tratar de ver el problema como ellos lo ven, aveces es muy complicado.
Espero que podamos sacar adelante a bothy, se que podrá con un poco de ayuda y mucha paciencia.
Me alegro que estés pendiente de este tema, se que poco a poco saldrá.
Paciencia y una caña.:p
Saludos

Casimiro Noteví 16-03-2010 17:22:00

¿Y por qué no comprimes el proyecto (sin ejecutable) y lo dejas para que lo probemos?

BrunoBsso 16-03-2010 19:06:03

Casimiro, te digo algo similiar a lo que le dije a Caral.
Le dije prácticamente lo mismo que acabás de decir vos, pero tampoco me mostró el proyecto ni me dió mas código para verificar.
No sé qué pasará, pero no responde a las ayudas.

Caral 16-03-2010 19:08:44

Hola
Siempre queda la alternativa del chock eléctrico:D:D:D
Saludos
PD: Por internet seria una trasferencia electronica de Bytes......:D:D:D

bothy 17-03-2010 03:21:06

soy estudiante de univercidad estoy en 4 semestre soy muy novato en delphi
pero tengo ganas de aprender, a veces no contexto a las ayudas porque tengo que ir a clases. orita vere como subo el programa para poder mandarcelos.

Caral 17-03-2010 03:44:45

Hola
bothy; Te comento que no puedes recibir mensajes privados, tienes demasiados en tu buzón.
Deberías borrar algunos si quieres recibir respuestas.
Saludos

bothy 17-03-2010 03:48:00

Hola
caral
ya he descargados mis mensages y ya puedo resivir mensages,
otra pregunta caral puedo subir mi programa al directorio del clubdelphi
para que lo revisen y me puedan ayudar mejor...

roman 17-03-2010 04:04:23

El FTP del club no está pensado para este fin. Intenta poner tu código en un zip y adjúntalo a un mensaje. Si fuera demasiado grande para eso, prueba a subirlo a un servicio de archivos compartidos como RapidShare.

// Saludos

bothy 17-03-2010 05:10:31

Aqui esta el link del programa para Que lo descargen y lo revisen


http://rapidshare.com/files/36439657...i__os.rar.html

roman 17-03-2010 06:30:39

Hola,

He visto tu programa sin mucho detalle, y, aun cuando no he podido reproducir el problema, sí observo dos puntos que pueden causar una violación de acceso.

En los formularios fromcinco6 y fromninos7 tienes dos variables:

Código Delphi [-]
var vector:array[1..4]of integer;

// y

var vector:array[1..16]of integer;

respectivamente. Ambos arreglos comienzan en 1. Y, sin embargo, en el OnCreate tienes ciclos como estos:

Código Delphi [-]
for i:=0 to 3 do

...


for i:=0 to 15 do

Así que, en ambos casos, intentas acceder al elemento vector[0] que no existe, y puede ser lo que causa el problema.

Para un futuro recuerda que, si bien un Access Violation es un error muy poco específico, por lo general quiere decir que estás intentando acceder a un área de memoria a la cual no tienes permiso de hacerlo y eso sucede, mayoritariamente por tres razones:

1. Intentas acceder a un objeto que no ha sido creado.
2. Intentas usar un apuntador al que no has asignado memoria.
3. Intentas acceder a un elemento de un arreglo fuera de rango (más allá de los índices definidos).

De manera que, cuando sucede un error así, es bueno revisar estos tres puntos.

También, es importante tratar de localizar exactamente la línea en que se produce la excepción.

Por último; cuando desees que te ayuden, intenta facilitar las cosas para que esto suceda. Todos tenemos ocupaciones, pero así como hay varios aquí dispuestos a dar parte de su tiempo en ayudarte, lo adecuado es que tú pongas parte del tuyo y no dejes de atender el hilo.

Otra cosa para facilitar las cosas es tratar de simplificar. En tu proyecto, por ejemplo, las imágenes y música son innecesarias. Si las quitas reduces el zip a 18Kb, que caben perfectamente en un archivo adjunto a un mensaje.

// Saludos

bothy 17-03-2010 08:45:29

Hola roman Tomare en cuenta todo lo que me dises..
y muchas gracias por tomarte ese tiempo en ayudarme. se que soy novato todavia en en esto de la programacion ya que tengo 2 años estudiando ingenieria de software y lo bueno que estoy seguro que me gusta mucho la programacion sienpre entro al foro para aprender algo nuevo.

y gracias por la observacion que me diste de mi programa ya resolvi el error y ya me truena el programa, estabas en lo correcto con el uso de memoria

Código Delphi [-]
var vector:array[1..4]of integer;

// y

var vector:array[1..16]of integer;
y
Código Delphi [-]
for i:=0 to 3 do

...


for i:=0 to 15 do

e resuelto el error ...

tambien Quisiera saver si han subido mas tutoriales como el de caral de la BD del banco con access y delphi ..


La franja horaria es GMT +2. Ahora son las 00:45:52.

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