![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
||||
|
||||
|
Cita:
huy... huy... qué peligro ![]() Precisamente ahí, como dice Neftalí, es una gran fuente de posibles problemas: buffers, arrays dinámicos, etc.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#2
|
|||
|
|||
|
Memoria del Stack
Tendría ó sabría alguno qué funciones me permitirían mirar y manipular la memoria del Stack? . . . he estado mirando las API "GlobalMemoryStatus" y lo que obtengo son los mismos valores de la memoria física del Administrador de Tareas, que como comenté anteriormente, tiene suficiente memoria disponible al momento de sacar el mensaje de "Out of Memory".
|
|
#3
|
|||
|
|||
|
Hola,
Cita:
|
|
#4
|
|||
|
|||
|
Código . . .
He tratado de simplificar el código con la parte dónde se maneja la memoria dinámica, a ver si alguno me dá una idéa del problema de la aplicación. Como esta hay otras varias.
Código:
function TfrmPaginar.ObtenerListado( { Params}): Boolean;
Const
Desborde65 = 65535+1;
Desborde130 = Desborde65*2;
Desborde190 = Desborde65*3;
var
ListaCabecera : TStringList;
BufferPagDes,
BufferPagDes65,
BufferPagDes130,
BufferPagDes190 : array of LongInt;
begin
Result := True;
listaCabecera := TStringList.Create;
Try
Try
SetLength(BufferPagDes, NumPaginas + 1);
SetLength(BufferPagDes65, NumPaginas + Desborde65 + 1);
SetLength(BufferPagDes130, NumPaginas + Desborde130 + 1);
SetLength(BufferPagDes190, NumPaginas + Desborde190 + 1);
Except
On E: EOutOfMemory do
Begin
ShowMessage('Falta de Memoria: ' + E.Message);
Result := False;
end; // On
end; // Try
// ***** Código ****
BufferCab := StrAlloc(TamanoCab);
BufferCab := listaCabecera.GetText;
// ***** Código ****
Finally
listaCabecera.Free;
if conCabecera then
StrDispose(BufferCab);
Finalize(BufferPagDes);
Finalize(BufferPagDes65);
Finalize(BufferPagDes130);
Finalize(BufferPagDes190);
end;
end;
Última edición por Casimiro Noteví fecha: 26-01-2010 a las 17:15:36. Razón: Poner etiquetas code |
|
#5
|
|||
|
|||
|
Hola,
haces un array de longint y le asignas numpaginas como longitud, aparte del desborde? no tendria que ser numero de datos por pagina * numpaginas (algo asi)? Porque usas 3 arrays? fijate que si asignas NumPaginas + Desborde65 + 1 ya estas asignando mas de 65535, por lo que en el caso que se pueda asignar mas de 65535 puedes directamente usar un array para todo(en el caso que no se pueda asignar te saltaria un error de memoria, claro, quiza vaya por aqui...)... Personalmente haria una clase y lo miraria todo con lupa (mirar los limites de asignacion, que ahora no se; si el finalize funciona correctamente, si se necesita el freeandnil, etc...) De todas maneras, para encontrar el error ahora lo mejor seria ir con el step para saber en que linea te salta... Un saludo y a ver si te sirve. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Out of Memory | luxus | OOP | 5 | 30-09-2008 23:11:54 |
| rx memory table | julyus | .NET | 2 | 18-09-2008 20:27:08 |
| error.. out of memory... | CarlosHernandez | Firebird e Interbase | 12 | 07-03-2007 14:03:22 |
| Juego Memory | Xema | OOP | 1 | 16-09-2004 13:59:24 |
| insificient memory | fabriciof | Conexión con bases de datos | 1 | 26-04-2004 20:03:29 |
|