Hi guys
had written cs_malloc to encapsulates malloc , the result would be automatically filled with the new memory position or NULL on failure . but seems there is some bug in my cs_malloc function , which cause memory leaks , mtrace also confirmed this memory leaks ,
would highly appreciated if any expert help me , to correct my cs_malloc function inorder to fix this memory leaks (since it's few lines of code (3-4 lines) would appreciated if write the source code correction u mean for this fix)Code:oscam-simples.c : 636 *tmp = malloc (size);
P.S : in bellow , i qoute neccassary source codes , but if u need to see furthore source code of the application , u could see it here : trunk (oscam-simples.c is the place where cs_malloc function had written) :
in differnet part of my app modules , i had used cs_malloc , ie , like this :Code:/* This function encapsulates malloc. It automatically adds an error message to the log if it failed and calls cs_exit(quiterror) if quiterror > -1. result will be automatically filled with the new memory position or NULL on failure. */ void *cs_malloc(void *result, size_t size, int32_t quiterror){ void **tmp = result; // This is oscam-simples.c , line 636 which is indicate in mtrace log *tmp = malloc (size); if(*tmp == NULL){ cs_log("Couldn't allocate memory (errno=%d %s)!", errno, strerror(errno)); if(quiterror > -1) cs_exit(quiterror); } else { memset(*tmp, 0, size); } return *tmp; }
Code:void *d; if(!cs_malloc(&d, n, -1)) return -1;
maybe it's redundant to this issue , but i also quote the way , i had implemented cs_reallo function tooCode:mtrace log : $* is no longer supported at /opt/STM/STLinux-2.3/host/bin/mtrace line 2. - 0x2c200468 Free 328 was never alloc'd /home/pooya/DEV/stable/mtrace/oscam.c:3137 Memory not freed: ----------------- Address Size Caller 0x004c1378 0x1c at 0x29561708 0x004c1398 0x60 at 0x2956370c 0x004c1400 0x5 at /home/pooya/DEV/stable/mtrace/oscam-simples.c:636 0x004c1410 0x28 at /home/pooya/DEV/stable/mtrace/oscam-simples.c:636 0x004c1440 0x13 at /home/pooya/DEV/stable/mtrace/oscam-simples.c:636 0x004c1458 0xf at 0x29814592 0x004c1470 0xc at 0x298202e2 0x004c1480 0xc at 0x298202e2 0x004c1490 0xd at 0x298202e2 0x004c14a8 0xd at 0x298202e2 0x004c14c0 0xc at /home/pooya/DEV/stable/mtrace/oscam-simples.c:636 0x004c14d0 0xc at /home/pooya/DEV/stable/mtrace/oscam-simples.c:636 0x004c14e0 0x8 at 0x2985e926 0x004c14f0 0x10 at 0x29850b74 0x004c1508 0x8 at 0x2985e11a 0x004c1518 0xc at 0x2985e176 0x004c1528 0x17 at 0x2955cc18 0x004c1548 0x17 at 0x2955fed0 0x004c1570 0xf at 0x2985ea2c 0x004c1588 0x26 at 0x2985e472 0x004c15b8 0xe at 0x2985ea2c 0x004c15d0 0x26 at 0x2985e472 0x004c1600 0xf at 0x2985ea2c 0x004c1618 0x26 at 0x2985e472 0x004c1648 0xe at 0x2985ea2c 0x004c1660 0x26 at 0x2985e472 0x004c1690 0x24 at 0x2985e472 0x004c16b8 0x11 at 0x2985ea2c 0x004c16d0 0x26 at 0x2985e472 0x004c1700 0x24 at 0x2985e472 0x004c1728 0x12 at 0x2985ea2c 0x004c1740 0x26 at 0x2985e472 0x004c1770 0x11 at 0x2985ea2c 0x004c1788 0x26 at 0x2985e472 0x004c17b8 0xf at 0x2985ea2c 0x004c17d0 0x26 at 0x2985e472 0x004c1800 0xc at 0x2985ea2c 0x004c1810 0x26 at 0x2985e472 0x004c1840 0x11 at 0x2985ea2c 0x004c1858 0x26 at 0x2985e472 0x004c1888 0x26a at 0x2955fd8c 0x004c1af8 0x17d8 at /home/pooya/DEV/stable/mtrace/oscam-simples.c:636 0x004c32d8 0x1338 at /home/pooya/DEV/stable/mtrace/oscam-simples.c:636 0x004c4618 0x160 at 0x29802e36 0x004c4780 0x88 at 0x29564c06 0x004c4810 0x88 at 0x29564c06 0x004c48a0 0x28 at /home/pooya/DEV/stable/mtrace/oscam-simples.c:636 0x004c48d0 0x10 at 0x29850b74 0x004c48e8 0x10c at 0x298213a4 0x004c49f8 0x2010 at /home/pooya/DEV/stable/mtrace/oscam-simples.c:636 0x004c6a10 0x28 at /home/pooya/DEV/stable/mtrace/oscam-simples.c:636 0x004c6a40 0x20 at /home/pooya/DEV/stable/mtrace/oscam-simples.c:636 0x004c6a68 0x2010 at /home/pooya/DEV/stable/mtrace/oscam-simples.c:636 .. ... ....
Thanks in advanceCode:/* This function encapsulates realloc. It automatically adds an error message to the log if it failed and calls cs_exit(quiterror) if quiterror > -1. result will be automatically filled with the new memory position or NULL on failure. If a failure occured, the existing memory in result will be freed. */ void *cs_realloc(void *result, size_t size, int32_t quiterror){ void **tmp = (void *)result, **tmp2 = (void *)result; *tmp = realloc (*tmp, size); if(*tmp == NULL){ cs_log("Couldn't allocate memory (errno=%d %s)!", errno, strerror(errno)); free(*tmp2); if(quiterror > -1) cs_exit(quiterror); } return *tmp; }



LinkBack URL
About LinkBacks



