Здравствуйте, AntonioDev, Вы писали:
AD>Здравствуйте, ginger24, Вы писали:
G>>Чем омжно отследить утечку памяти? Пишу под g++ FreeBSD, программа в памяти раздувается до размера примерно пол-гига памяти после чего дохнет
G>>Не могу отследить, где там что переполняется, при запуске программа уходит в ежим демона и там крутятся несколько циклов, с чего начать?
AD>Обрати внимание на:
AD>1. Объявление используемых переменных, возможно выделяешь лишнего.
Везде где использую malloc realloc после этого делаю free _NAME
там где new — делаю delete _NAME, открытые файлы закрываю, может быть где то еще неправильно...
Например в конструкции вида if else у меня объявляются переменные, char vv[256], соответственно они только там используются, может быть из-за этого?
AD>2. В циклах, которые крутятся, видимо что то пишешь, вылезая за рамки выделенной памяти.
там два икла, один в другом, первый — на коннект к серверу, если обрывается то просто заново тчо бы соединялся, вида while(true), второй собственно цикл постонного приема данных.
AD>3. Нитями пользуешься?
Да, в зависимости от того какой пришел результат, вот код вызова:
int *sleeptime, retval;
sleeptime = (int *)malloc(sizeof(int));
*sleeptime = timeR-(timeR/10);
retval =pthread_create(&tid[0], NULL, sleeping, (void *)sleeptime);
if (retval != 0)
{
log_message("[A] Error, could not create thread");
}
#ifdef DEBUG_INFO
else
{
sprintf(logmes, "[D] Next time authorisation remain %i sec of %i.",*sleeptime,timeR);
log_message(logmes);
}
free sleeptime;
#endif
собственно сам процесс:
void *sleeping(void *arg)
{
int sleep_time = *(int *)arg;
sleep(sleep_time);
#ifdef DEBUG_INFO
printf("\n\t[A] Next authorisation %i is awakening!\n", (int)pthread_self());
#endif
char Buf[LenA];
Buf[0] = ZTS_Reg_AVTORIZATION;
int dx=(int) (rand()%256+1); Buf[1] = dx;
dx=(int) (rand()%256+1); Buf[6] = dx;
Buf[7] = Enabled_Build;
*( (unsigned long *)&Buf[2] ) = dA;
#ifdef DEBUG_INFO
printf("\t\t\t[A] - Buf: %lu", *( (long *)&Buf[2] ));
#endif
int sendbytes = send(sock,Buf,LenA,0);
if(sendbytes == -1)
printf("\t[A] Connect Dropped!\n");
#ifdef DEBUG_INFO
else
printf("\t[A] Success! Sent %i bytes of %i!\n",sendbytes, LenA);
#endif
pthread_exit(NULL);
}