- Как определить утечку памяти в прграмме на С++?, Olej, 13:16 , 28-Май-03 (1)
- Как определить утечку памяти в прграмме на С++?, David, 03:08 , 30-Июн-03 (4)
- Как определить утечку памяти в прграмме на С++?, sol, 16:32 , 30-Июн-03 (6)
>#ifdef DEBUG >#define MALLOC(ptr,size) \ >ptr = malloc (size); >pthread_mutex_lock(&gMemMutex); \ >gMemCounter++; \ >pthread_mutex_unlock(&gMemMutex); >#else >#define MALLOC(ptr,size) ptr = malloc (size); >#endif Этот макрос в 70% случаев не будет работать корректно. Так, например, для констукции вида if (condtion) MALLOC(ptr, size); после препроцессирования мы получим (выровненно для наглядности): if (condition) ptr = malloc (size); pthread_mutex_lock(&gMemMutex); gMemCounter++; pthread_mutex_unlock(&gMemMutex); ; если условие выполняет - ошибка останется "незамеченной", если же не выполняется - мы увеличим счетчик без выделения памяти - итог десятки человеко-часов на поиски ошибки выделения памяти. Думаю правильным было бы использование следующей конструкции: #ifdef DEBUG #define MALLOC(ptr,size) do { \ ptr = malloc (size); \ pthread_mutex_lock(&gMemMutex); \ gMemCounter++; \ pthread_mutex_unlock(&gMemMutex); \ while (0) #else #define MALLOC(ptr,size) ptr = malloc (size) #endif
- Как определить утечку памяти в прграмме на С++?, .ChiP., 16:32 , 30-Июн-03 (7)
- Как определить утечку памяти в прграмме на С++?, Миша, 19:05 , 30-Май-05 (14)
- Как определить утечку памяти в прграмме на С++?, Арлекин, 08:51 , 30-Июн-03 (5)
- Как определить утечку памяти в прграмме на С++?, asso, 11:37 , 02-Июл-03 (13)
|