Discover 处理计算机代码。该工具可检测到装入和存储等计算机指令中的错误,并将这些错误与源代码相关联。某些源代码语句没有关联的计算机指令,因此,看上去 Discover 没有检测到明显的用户错误。例如,请看以下 C 语言代码片段:
int *p = (int *)malloc(sizeof(int)); int i; i = *p; /* compiler may not generate code for this statement */ printf("Hello World!\n"); return;
由于内存未初始化,读取 p 所指向的地址处存储的值就是一个潜在的用户错误。但是,优化编译器可以检测到未使用变量 i,因此,不会生成让语句读取内存并将其分配到 i 的代码。在此情况下,Discover 不会报告使用了未初始化内存 (UMR)。