2014-06-26 20 views
0

如何通过静态分析(不使用任何工具)检测第三方C代码中的内存泄漏。 就像我们如何验证分配的内存已经被释放而不使用任何工具?如何通过静态分析(不使用任何工具)检测巨大C代码中的内存泄漏

+1

你问如何读取你的代码来发现内存泄漏?或者如何针对它进行编程? – StoryTeller

+3

您能澄清“通过静态分析(不使用任何工具)”的概念吗?静态分析器是一种工具。您是否打算不使用任何静态分析器进行静态分析? –

回答

3

如果你不打算使用任何工具,那么你所能做的就是读取代码,并考虑它的执行方式。

  • 是否有任何角落的情况下,资源分裂为很少采用的路径,可能无法释放资源?
  • I/O如何,可以失败并导致意外的路径被采取?

当然,没有使用任何工具,这是一个非常奇怪的限制。

1

从绝对的角度来说,“你不能”。

你怎么能发现这个代码泄漏(它没有意义,它只是为了让你理解)。 如果用户将1作为命令行参数传递,则代码不会泄漏。 但是,如果他通过2 ...

int main(int argc, const char * argv[]) { 
    //insert code here... 

    int numberOfLoops = atoi(argv[1]); 

    int i = 0; 
    void *ptr; 
    for (i = 0; i <= numberOfLoops; i++) { 
     ptr = malloc(sizeof(int)); 
     printf("loop\n"); 
    } 

    free(ptr); 

    return 0; 
}