内存不足是java和其他OO语言中最常见的错误之一。 我们可以应用静态程序分析来减少“内存不足”错误吗? 我正在寻找旨在减少此错误而不运行代码的方法。 是否有任何特定的分析领域在此进行研究?
答案 0 :(得分:1)
是的,静态分析仪能够检测到越界。它们比动态分析器略差,因为它们无法追踪指针使用的复杂情况。而且,静态分析仪无法获得一些信息。让我们考虑一个抽象的情况:
void OutstandingIssue(const char *strCount)
{
unsigned nCount;
sscanf_s(strCount, "%u", &nCount);
int array[10];
memset(array, 0, nCount * sizeof(int));
}
数组索引是否超出界限,它将取决于数据 从外面收到。静态代码分析器在这里无能为力。它在此处可以执行的最大操作是警告输入的值未经检查即可使用。动态分析器将在测试程序期间检测到错误,同时它将接收各种输入数据变体。这些主题将here提供更多详细信息。
但如果有一个问题“静态分析仪确实有帮助吗?”,答案是肯定的,确实如此。例如,PVS-Studio团队收集的一组错误包含静态分析器检测到的大量此类错误:V512,V645。