2011-05-25 14 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