Ver Mensaje Individual
  #12  
Antiguo 05-11-2008
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Reputación: 21
gatosoft Va camino a la fama
Bueno, yo hice el ejercicio básico, según lo indicado por nuestro amigo y cuando entra a la función de graficar me arroja un Stack Overflow... (Y eso que la función no tiene nada)

Código Delphi [-]
Var ArrayGrande: Array of Extended;

function GenerarRandomico: Extended;
Begin
  //Utilizo la famosa distribución.... randómica...
  Result:= Random(50000000);
end;

procedure graficar(vector: array of extended);
begin
//
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
Var i:Integer;
begin
  Randomize;
  SetLength(arraygrande, 2000000);

  for i:=Low(arraygrande) to High(ArrayGrande) do
    arraygrande[i] := GenerarRandomico;

  graficar(arraygrande);
  ShowMessage('Listo');
end;

hice una modificación quitando la variable que se pasa como parámetro y utilizando la global en el procedimiento graficar y aqui si funciona...

Código Delphi [-]
procedure graficar;
begin
  // aqui utilizo la variable global: arraygrande
end;

bueno, ni que decir, pude ejecutarlo sin problemas... Yo no creo que sea un problema de memoria, insisito, pienso que hay algo mas en tu codigo que genera este error... y como te comente anteriormente, no siempre se muestra la linea que origina el error sino la linea que detecta la violación...

Pienso que deberías intentar el "Metodo de Descartes", es decir ir descartando codigo comentandolo y ejecutandolo por partes.... por ejemplo... has el ejercicio solamente con la generación de los numeros (sin imprimirlos) si vuelve a fallar puedes decir que el algoritmo que grafica no tiene nada que ver...

Cambia la formula de generación de aleatorios, maneja una distribución sencilla (como la que yo utilizo Result:= random (100)) si sigue fallando, entonces sabras que el error tampoco está por ahi... en fin...

otra alternativa, si consideras que puede ser memoria sería ayudarte de una "memoria cache" o un Buffer para generar, almacenar y leer tus datos... me refiero a que puedes guardar los datos en un archivo o BD y no en memoria... Obviamente como ejercicio, no te pido que cambies la logica de tu codigo, es tambien solo para descartar...

un saludo
Responder Con Cita