Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error de 'El programa xxxx.exe dejo de funcionar' por array of ansichar (https://www.clubdelphi.com/foros/showthread.php?t=88334)

masrmty 21-05-2015 18:56:49

Error de 'El programa xxxx.exe dejo de funcionar' por array of ansichar
 
Hola buen dia.
Tengo problema con una funcion que utiliza la siguiente instruccion:
Código Delphi [-]
var inbuf: array [0..500000000] of ansichar;
Esta instruccion funciona bien cuando el valor maximo es de 1000000.
El codigo completo donde la utilizo es este:
Código Delphi [-]
function CalculaSelloConBig(cadenaoriginal: string; Hash:THash; key: pEVP_PKEY): string;
var inbuf: array [0..500000000] of ansichar;
  outbuf: array [0..1024] of ansichar;
  mdctx: EVP_MD_CTX;
  Len: cardinal; 
begin
  StrPCopy(inbuf,UTF8Encode(cadenaoriginal));
  if Hash = MD5 then EVP_SignInit(@mdctx,EVP_md5());
  if Hash = SHA1 then EVP_SignInit(@mdctx,EVP_sha1());
  EVP_SignUpdate(@mdctx,@inbuf,StrLen(inbuf));
  EVP_SignFinal(@mdctx,@outbuf,Len,key);
  result := BinToBase64(@outbuf,Len);
end;
El problema que se presenta es al momento de ejecucion se aborta el programa solo diciendo que: El programa xxxx.exe dejo de funcionar.
Cualquier ayuda se los agradesco.

Casimiro Notevi 21-05-2015 19:06:32

500000000
;)

¿Y cuánta memoria tiene tu equipo?

masrmty 21-05-2015 19:10:48

Hola gracias por responder.

La maquina tiene 4GB, utilizo Delphi XE4.
Pero la instruccion falla si le pongo 2,000,000 tambien.

Casimiro Notevi 21-05-2015 19:18:51

¿Y para qué necesitas 500 millones de posiciones en un array?

nlsgarcia 21-05-2015 19:22:19

masrmty,

Cita:

...Tengo problema con una función que utiliza la siguiente instruccion...var inbuf: array [0..500000000] of ansichar...al momento de ejecución se aborta el programa solo diciendo que: El programa xxxx.exe dejo de funcionar...La máquina tiene 4GB, utilizo Delphi XE4...
¡Bienvenido al Club Delphi! :D

Pregunto:

1- ¿Que versión de Windows y de cuantos bits (32/64) utiliza la aplicación?.

2- ¿Haz considerado usar arreglos dinámicos para optimizar los recursos de la aplicación?.

Revisa esta información:
Espero sea útil :)

Nelson.

masrmty 21-05-2015 21:16:01

Hola Casimiro,

Mira esta funcion la he utilizado para el tema de la facturacion electronica (Mexico) para generar el sello de la cadena, normalmente el valor que se requeria para esto es de 20,000 a 50,000.

Ahora ocupo esa misma funcion para el tema de la contabilidad electronica, solo que aqui los archivos a sellar son mucho mas grandes que una factura.

Esa funcion la compre hace como 4 años con alguien que vendia la solucion para la factura electronica, pero ya no tiene soporte.


Hola NlsGarcia,
La maquina en donde estoy haciendo eso es Windows Server Standar 2008 de 32 bytes.
He intentado hacer el array de manera dinamica pero marca error al compilar.

Saludos.

ecfisa 21-05-2015 21:24:11

Hola masrmty.

Lo primero que noto es que el arreglo está declarado dentro de la función por lo que será almacenado en el stack, y dado su tamaño, no me extraña que haya desborde...

Intenta declarándolo como variable global oculta, dentro de la sección implemetation de la unidad donde resida la función:

Código Delphi [-]
...
implementation

var
  inbuf : array [0..500000000] of AnsiChar;

function CalculaSelloConBig(cadenaoriginal: string; Hash:THash; key: pEVP_PKEY): AnsiChar;
var
  outbuf: array [0..1024] of ansichar;
  ...
begin
  ...

Saludos :)

masrmty 21-05-2015 21:37:13

Hola Ecfisa,

Con tu comentario ya funciono y le puse hasta 1,000,000,000 y funciona perfectamente.
Muchas gracias.

Tambien gracias a todos los que respondieron.

Saludos.


La franja horaria es GMT +2. Ahora son las 03:47:48.

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