#c
#c
Вопрос:
struct sigevent timerEvent;
memset(amp;timerEvent, 0, sizeof(timerEvent));
timerEvent.sigev_value.sival_int = 0;
timerEvent.sigev_value.sival_ptr = diaBase;
timerEvent.sigev_notify = SIGEV_THREAD;
timerEvent._sigev_un._sigev_thread._function = function;
timerEvent._sigev_un._sigev_thread._attribute = NULL;
timer_t timer_ID;
int retVal;
if((retVal = timer_create (CLOCK_REALTIME, amp;timerEvent, amp;timer_ID )) != -1)
{
printf("Timer Created Successfully: %ldn", timer_ID );
}
else
{
printf("Error Creating Timern");
}
Утечку памяти, следующее обозначает
Syscall param timer_create(evp) points to uninitialised byte(s)
==27384== at 0x530595: timer_create (in /lib/librt-2.5.so)
Комментарии:
1. Это из выходных данных valgrind?
2. Вы проверяете наличие утечек памяти в конце выполнения программы?
3. Это сообщение не указывает на утечку памяти.
Ответ №1:
Ответ №2:
Возникла та же проблема, и valgrind остался доволен этим:
timer_t timerId;
struct sigevent* sigev = static_cast<struct sigevent*>(calloc(1, sizeof(struct sigevent)));
sigev->sigev_notify = SIGEV_SIGNAL;
sigev->sigev_signo = SIGALRM;
sigev->sigev_value.sival_ptr = amp;timerId;
timer_create(CLOCK_REALTIME, sigev, amp;timerId);
// Use the timer
...
// After totally done with the timer
free(sigev);
Я использовал это в качестве ссылки: http://pubs.opengroup.org/onlinepubs/7908799/xsh/timer_create.html
Ответ №3:
Для меня это выглядит довольно неинициализированным:
timer_t timer_ID;
Вы memset
редактируете timerEvent
, но не его.
Комментарии:
1. TimerEvent.sigev_value.sival_int = 0; TimerEvent.sigev_value.sival_ptr = diaBase; TimerEvent.sigev_notify = SIGEV_SIGNAL; TimerEvent.sigev_signo = SIGUSR1; TimerEvent._sigev_un._sigev_thread. _function = функция; TimerEvent._sigev_un._sigev_thread._attribute = NULL; Он работает с инициализацией этой структуры