在使用boost::polymorphic_cast
确保指针不为空时,我收到此错误(C12182)编译我的代码的Release | x86版本。
Warning 2 warning C28182: Dereferencing NULL pointer. 'tv' contains the same NULL value as '(dva::TimedValue *)=(tv)' did. : Lines: 808, 810, 812, 813, 808, 810, 812 c:\path\to\my\code\timedvalue.cpp 812 1 mylibrary
我的问题是,为什么我会收到此警告?我该怎么办?如果指针为null,则polymorphic_cast
将抛出。据我所知,这段代码是正确的。我错过了什么?
这是我的代码。 apr_time_t
是一个64位的int,而m_cobjs是指向从中派生TimedValue
的类的指针的向量。如果指针为空,则注释掉的ASSERT_PTR
会抛出异常,如果我取消注释,则会解析警告。
void TimedValueTable::RemovePointsBefore(apr_time_t time)
{
for (size_t i = 0; i < m_cobjs.size(); )
{
TimedValue *tv = boost::polymorphic_cast<TimedValue *>(m_cobjs[i]);
// ASSERT_PTR(tv);
if (tv->get_Time() < time)
delete tv;
else
++i;
}
}