[C con Clase] Malloc y mallinfo

Antonio Gómez jagse en intercomgi.com
Dom Ene 2 02:21:53 CET 2011


Hola a todos:

Al escribir un programa en una asignación de malloc me devolvió un puntero
nulo, es decir que no tenía memoria.

No creo que el problema sea de uso masivo de variables ni de tamaño de las
mismas.

Para averiguar donde tenía el problema intenté usar la estructura mallinfo
pero los resultados que me dá no son

correctos. Es decir, no se como se usa mallinfo correctamente.

 

Para probar como se usaba escribí un pequeño programa en C que asignaba con
malloc cada elemento de una

matriz de punteros un espacio de 100Megas (SI CIEN MEGAS) y después de cada
asignación, presentaba

la estructura mallinfo, además de controlar que se habían asignado
correctamente el espacio a cada puntero.

 

Pues bien, hasta el puntero nro. 10 no me devolvió un puntero nulo, es decir
que no tenía espacio de memoria.

pero la información que presentaba de mallinfo era incoherente.

La primera vez, antes de asignar nada, todos los campos devolvían la
cantidad de 134.451.819 y después de la

primera asignación devolvían 0, pero hasta la 10 asignación el sistema me
dejó asignar memoria.

 

Os envio el programa que hice para testear y presentar la estructura
mallinfo. ¿Dónde me equivoco?. ¿hay que ini

cializar mallinfo de alguna forma?.

 

Muchas gracias

 

P.D. En el programa hay funciones, macros propias y definiciniones, como
Locate ,LOCATE. Y Pulse_Una_Tecla()

 

#include <stdio.h>

#include <stdlib.h>

#include <defines.i>

#include <verif.i>

 

 

 

int Presenta_Info(char *_m) {

      struct mallinfo *_p;

      LOCATE(1,1);

      printf("Arena       =%d\n",_p->arena);

      printf("ordblks     =%d\n",_p->ordblks);

      printf("smblks      =%d\n",_p->smblks);

      printf("hblks       =%d\n",_p->hblks);

      printf("hblkhd      =%d\n",_p->hblkhd);

      printf("usmblks     =%d\n",_p->usmblks);

      printf("fsmblks     =%d\n",_p->fsmblks);

      printf("uordblks    =%d\n",_p->uordblks);

      printf("fordblks    =%d\n",_p->fordblks);

      Pulse_Una_Tecla(_m);

      return(0);

}

 

 

main(void){

      char *_a[1000],men[20];

      int x;

                                                  

      Presenta_Info("Inicio");

      for(x=0;x<1000;x++){

            Locate(20,1);

            if ((_a[x]=malloc(100000000))==NULL) {

                  printf("No tengo memoria _a\n");   

                  break;

            }

            Locate(20,1);

            sprintf(men,"_a[%d]",x);

            Presenta_Info(men);

      }

}

 

------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20110102/99be5ada/attachment.html>


Más información sobre la lista de distribución Cconclase