Programación General > Pascal

 punteros

(1/2) > >>

aguila3000:
He escrito el siguiente programa, y tengo algunas preguntas:


--- Código: Pascal ---Var p01,p02,p03,p04:^byte; Begin   getmem(p01,1024*1024*1024);   if (p01<>nil) then Writeln('ok 1')   else Writeln('ko 1');    getmem(p02,1024*1024*1024);   if (p02<>nil) then Writeln('ok 2')   else Writeln('ko 2');     getmem(p03,1024*1024*1024);   if (p03<>nil) then Writeln('ok 3')   else Writeln('ko 3');    getmem(p04,1024*1024*1024);   if (p04<>nil) then Writeln('ok 4')   else Writeln('ko 4'); End. 
¿Cómo puedo saber que ya no tengo memoria para los punteros?
¿Cómo puedo evitar el error: "runtime error 203 ..."?
¿Cómo puedo crear punteros de 4GB o de tamaño mayor?

Enko:
Puntero es solo una variable que apunta a una direccion de memoria... medio dificil que no tengas espacio para punteros. Si te puede pasar que no tengas memoria para reservar.

si getmem te devuelve nil es que ya no hay  memoria para reservar.

Si programas en DOS creo que el limite son 64kb si mal no recuerdo.
En el modo protegido de 32 bin (windows xp) la arquitectura est'a hecha de tal manera del CPU que solo puede redireccionar 4gb de memoria.

aguila3000:
Gracias por tu respuesta.
Si no hay memoria, entonces.
¿Cómo puedo evitar crear más variables dinámicas?

Al usar getmem, se supone que al no haber memoria debe darme nil, pero eso no sucede y sale el error runtime error 203.
Estoy usando Win32 (WindowsXP Pro, Vista) y el compilador freepascal, en Linux tambien me sucede lo mismo.

DriverOp:
Deberías usar la estructura try... except para eso:

http://www.freepascal.org/docs-html/ref ... 19000014.2

aguila3000:
ok, pero en C++, No tengo ese problema, cuando la variable dinámica no se puede crear, entonces me devuelve null o nil =0
En freepascal, porque no es lo mismo.
Probe con gnu y sale lo siguiente: ./a.out: out of heap when allocating 1073741824 bytes (error #853 at 804dc86)

¿ Sabes si este problema sucede con Delphi ?


--- Código: C++ ---#include <iostream>#include <cstdlib> using namespace std; int main (){    char *p01;  p01 = (char*) malloc(1024*1024*1024);  if (p01!=NULL) cout << "ok01n";  else cout << "ko01n";   char *p02;  p02 = (char*) malloc(1024*1024*1024);  if (p02!=NULL) cout << "ok02n";  else  cout << "ko02n";   char *p03;  p03 = (char*) malloc(1024*1024*1024);  if (p03!=NULL) cout << "ok03n";  else cout << "ko03n";   char *p04;  p04 = (char*) malloc(1024*1024*1024);  if (p04!=NULL) cout << "ok04n";  else cout << "ko04n";   return 0;} 

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa