当我在Valgrind中运行代码时,出现了分段错误,但在正常运行时没有。这是怎么可能的?
valgrind指出的罪魁祸首代码片段:
static inline void * Vec_PtrEntry( Vec_Ptr_t * p, int i )
{
assert( i >= 0 && i < p->nSize );
return p->pArray[i];
}
And the message by valgrind:
Process terminating with default action of signal 11 (SIGSEGV)
==3290== Access not within mapped region at address 0x0
如果通常代码可以正常运行,为什么会出现这种情况?我该如何解决?我需要对代码进行一些内存分析。
p
是如何创建的以及Vec_Ptr_t
的定义,很难说出问题出在哪里。 - R Sahup
为空或p->pArray
为空。(您可以添加关于此的新断言或扩展现有断言。)软件没有义务在调用未定义行为时崩溃;它似乎可以工作,并且通常会一直工作,直到你的老板向公司最重要的客户展示你的工作为止。至少你早早地找到了问题。 - Jonathan Leffler