2015-04-20 54 views
-6

我只是使用cppcheck代碼正常工作,只是cppcheck給出了這個錯誤。Cppcheck可能的空指針解除引用:

void WorkerThread(WorkBuffer* m_buffer) 
{ 
    std::cout << "Thread : " << m_buffer->m_id << ".....Starting" << std::endl; 

    if (NULL == m_buffer) 
     std::cout << "Thread : " << m_buffer->m_id << "......work buffer is null" << std::endl; 


    while(!shut_down_flag) 
    { 
     int k = 0; 
     //Sleep(1); 
     SleepSystemUsec(100000); 
     std::cout << "Thread : " << m_buffer->m_id << "....in while loop" << std::endl; 
    } // of while(!shut_down_flag) 

    std::cout << "Thread : " << m_buffer->m_id << ".....Request from main thread so ending working thread ...." << std::endl; 
}; 

錯誤::可能的空指針解引用:m_buffer - 否則,檢查它爲空是多餘的。

+0

請提供更多代碼和CPPCheck命令行選項。 – Corvusoft

+4

您正在檢查'm_buffer'是否爲'NULL' * * *之後,您已經使用它。該消息指出(正確),如果它*可以*爲'NULL'(如果不是,你爲什麼要檢查?)你應該在上面的行中使用它之前找出*。 –

+0

@PaulRoub:這應該是**答案**而不是**評論**。 –

回答

4
if (NULL == m_buffer) 

確保m_bufferNULL,然後你用

std::cout << "Thread : " << m_buffer->m_id << "......work buffer is null" << std::endl; 
          ^^^^^^^^^^^^^^^ 

這一點,這是唯一合法的,如果m_buffer反引用它不NULL(更確切地說,只有當它指向正確構建WorkBuffer)。

如果NULL是你的功能可能的輸入,你需要檢查它之前最先提領,然後要麼使它指向有效的東西或離開功能,無需提領。

+0

無法得到你所說的。請你提供一些細節 – user3521035

+3

@ user3521035你能否對你沒有得到的東西更具體一點? –

+0

事實上,cppcheck警告是針對之前的'm_buffer-> m_id <<「.....開始」'在檢查之前。它沒有發現這個錯誤。 – Jarod42

0

不僅是你的病情倒退:

如果m_bufferNULL
   做的事情,提領m_buffer
(呵呵!)

,但你有沒有檢查任何其他輸出語句。