2011-05-25 16 views
4
struct sigevent timerEvent; 
    memset(&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, &timerEvent, &timer_ID)) != -1) 
    { 
      printf("Timer Created Successfully: %ld\n", timer_ID); 
    } 
    else 
    { 
      printf("Error Creating Timer\n"); 
    } 

内存泄漏,下面表示timer_create给内存泄漏问题 “系统调用PARAM timer_create(EVP)指向未初始化的字节”

Syscall param timer_create(evp) points to uninitialised byte(s) 
==27384== at 0x530595: timer_create (in /lib/librt-2.5.so) 
+0

这是来自valgrind输出吗? – RedX 2011-05-25 10:05:41

+0

您是否在程序运行结束时检查内存泄漏? – 2011-05-25 10:08:50

+0

此消息不表示内存泄漏。 – bdonlan 2011-10-13 00:01:25

回答

0

这小艾uninitialzed对我说:

timer_t timer_ID; 

你是memset ing timerEvent但不是他的。

+0

我试过timer_t timer_ID = 0;仍然是相同的错误 – Renuka 2011-05-25 11:26:40

+0

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 = function; timerEvent._sigev_un._sigev_thread._attribute = NULL; 它正在使用此结构初始化 – Renuka 2011-05-25 11:31:58

1

有同样的问题,并提出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 = &timerId; 

timer_create(CLOCK_REALTIME, sigev, &timerId); 

// Use the timer 
... 

// After totally done with the timer 
free(sigev); 

我用这个作为参考:http://pubs.opengroup.org/onlinepubs/7908799/xsh/timer_create.html