This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

free touble


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;
}



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]