Re: FREE touble

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



4k memory is not for malloc() that you call.
malloc() return address pointing to heap. pmap showed heap in-use size is 0.

In fact, you have to free abc and lala which may cure your problem.

2007/8/7, johny@xxxxxxxxxxxxxx <johny@xxxxxxxxxxxxxx>:
> hi, all
>
> i want to ask, why free function did not do properly as it expected
> (happened in test_malloc.c), the usage memory (using malloc) still exist
> please help me, i have another program it, doing malloc continously, and
> free it when not needed, this happened several times,
> after some looping, my memory become 0 free, and it got hang.i did some
> investigation, and found there is something strange in free.
>
> anyone got idea what happen and give me a solution?
>
> thanks in advance
> Johny Jugianto
>
> using gcc:
> $ gcc --version
> gcc (GCC) 4.2.0
>
> here is my machine info
> $ uname -a
> Linux localhost.svr 2.6.9-55.ELsmp #1 SMP Wed May 2 14:28:44 EDT 2007 i686
> athlon i386 GNU/Linux
>
>
> -RESULT: pmap for test_malloc.c after ready to insert-----------------
> [nyto@nyto ~]$ pmap 5836
> 5836:   ./test_malloc
> 007ad000     88K r-x--  /lib/ld-2.3.4.so
> 007c3000      4K r----  /lib/ld-2.3.4.so
> 007c4000      4K rw---  /lib/ld-2.3.4.so
> 007c7000   1176K r-x--  /lib/tls/libc-2.3.4.so
> 008ed000      8K r----  /lib/tls/libc-2.3.4.so
> 008ef000      8K rw---  /lib/tls/libc-2.3.4.so
> 008f1000      8K rw---    [ anon ]
> 08048000      4K r-x--  /home/nyto/test_malloc
> 08049000      4K rw---  /home/nyto/test_malloc
> 08dcb000    132K rw---    [ anon ]
> b7ba2000   3920K rw---    [ anon ]
> bfff0000     64K rw---    [ stack ]
> ffffe000      4K -----    [ anon ]
>  total     5424K
> -RESULT: pmap for test_malloc.c after done free-----------------------
> [nyto@nyto ~]$ pmap 5836
> 5836:   ./test_malloc
> 007ad000     88K r-x--  /lib/ld-2.3.4.so
> 007c3000      4K r----  /lib/ld-2.3.4.so
> 007c4000      4K rw---  /lib/ld-2.3.4.so
> 007c7000   1176K r-x--  /lib/tls/libc-2.3.4.so
> 008ed000      8K r----  /lib/tls/libc-2.3.4.so
> 008ef000      8K rw---  /lib/tls/libc-2.3.4.so
> 008f1000      8K rw---    [ anon ]
> 08048000      4K r-x--  /home/nyto/test_malloc
> 08049000      4K rw---  /home/nyto/test_malloc
> 08dcb000  15708K rw---    [ anon ]
> b7ba2000   3920K rw---    [ anon ]
> bfff0000     64K rw---    [ stack ]
> ffffe000      4K -----    [ anon ]
>  total    21000K
> -RESULT: pmap for test_malloc2.c after ready to insert----------------
> [nyto@nyto ~]$ pmap 5841
> 5841:   ./test_malloc2
> 007ad000     88K r-x--  /lib/ld-2.3.4.so
> 007c3000      4K r----  /lib/ld-2.3.4.so
> 007c4000      4K rw---  /lib/ld-2.3.4.so
> 007c7000   1176K r-x--  /lib/tls/libc-2.3.4.so
> 008ed000      8K r----  /lib/tls/libc-2.3.4.so
> 008ef000      8K rw---  /lib/tls/libc-2.3.4.so
> 008f1000      8K rw---    [ anon ]
> 08048000      4K r-x--  /home/nyto/test_malloc2
> 08049000      4K rw---  /home/nyto/test_malloc2
> 087c3000    132K rw---    [ anon ]
> b7baa000   3920K rw---    [ anon ]
> bfee6000   1128K rw---    [ stack ]
> ffffe000      4K -----    [ anon ]
>  total     6488K
> -RESULT: pmap for test_malloc2.c after done free----------------------
> [nyto@nyto ~]$ pmap 5841
> 5841:   ./test_malloc2
> 007ad000     88K r-x--  /lib/ld-2.3.4.so
> 007c3000      4K r----  /lib/ld-2.3.4.so
> 007c4000      4K rw---  /lib/ld-2.3.4.so
> 007c7000   1176K r-x--  /lib/tls/libc-2.3.4.so
> 008ed000      8K r----  /lib/tls/libc-2.3.4.so
> 008ef000      8K rw---  /lib/tls/libc-2.3.4.so
> 008f1000      8K rw---    [ anon ]
> 08048000      4K r-x--  /home/nyto/test_malloc2
> 08049000      4K rw---  /home/nyto/test_malloc2
> 087c3000    132K rw---    [ anon ]
> b7baa000   3920K rw---    [ anon ]
> bfee6000   1128K rw---    [ stack ]
> ffffe000      4K -----    [ anon ]
>  total     6488K
>
>
> -FILE: test_malloc.c--------------------------------------------------
> #include<stdio.h>
> #include<stdlib.h>
> #include<string.h>
>
> #define JUMLAH 1000000
> #define ISI     100
>
> typedef struct _dodol
> {
>         char *abc;
> } dodol;
>
> int main()
> {
>         dodol **abc = (dodol**)calloc( JUMLAH, sizeof(dodol*) );
>         char *lala = (char*)malloc(sizeof(char)*ISI +1);
>         int i;
>         char a[10];
>
>         for(i=0; i<ISI; i++)
>                 lala[i] = 'a';
>         lala[i]=0;
>
>         printf("ready to insert\n");
>         scanf("%s",a);
>
>         for(i=0; i<JUMLAH; i++) {
>                 abc[i] = (dodol *)malloc(sizeof(dodol));
>                 //free( abc[i] );
>         }
>
>         //printf("ready to free\n");
>         //scanf("%s",a);
>
>         for(i=0; i<JUMLAH; i++) {
>                 free( abc[i] );
>         }
>         //free(abc);
>
>         printf("done free\n");
>         scanf("%s",a);
>
>         return 0;
> }
> -FILE: test_malloc2.c-------------------------------------------------
> #include<stdio.h>
> #include<stdlib.h>
> #include<string.h>
>
> #define JUMLAH 1000000
> #define ISI     100
>
> typedef struct _dodol
> {
>         char *abc;
> } dodol;
>
> int main()
> {
>         dodol **abc = (dodol**)calloc( JUMLAH, sizeof(dodol*) );
>         char *lala = (char*)malloc(sizeof(char)*ISI +1);
>         int i;
>         char a[10];
>
>         for(i=0; i<ISI; i++)
>                 lala[i] = 'a';
>         lala[i]=0;
>
>         printf("ready to insert\n");
>         scanf("%s",a);
>
>         for(i=0; i<JUMLAH; i++) {
>                 abc[i] = (dodol *)malloc(sizeof(dodol));
>                 free( abc[i] );
>         }
>
>         //printf("ready to free\n");
>         //scanf("%s",a);
>
>         for(i=0; i<JUMLAH; i++) {
>                 //free( abc[i] );
>         }
>         //free(abc);
>
>         printf("done free\n");
>         scanf("%s",a);
>
>         return 0;
> }
>
>
>


-- 
        Best wishes!
Yours,
Lijuan Hai
  _  _
  (_)(_)
   (,,)
  =()=
 ((__)\
   _|L\_______/

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux