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\_______/