如何通过静态分析(不使用任何工具)检测第三方C代码中的内存泄漏 . 就像我们如何在不使用任何工具的情况下验证已分配的内存已被释放?
如果您不打算使用任何工具,那么当然您所能做的就是阅读代码,并思考它是如何执行的 .
是否存在任何极端情况,其中exucution分裂为很少采取的路径,可能无法释放资源?
I / O怎么样,可以失败并导致意外的路径?
当然,不使用任何工具是一个非常奇怪的限制 .
绝对地说,“你不能” .
你怎么能发现这个代码中的泄漏(没有任何意义,它只是让你理解) . 如果用户将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; }
2 回答
如果您不打算使用任何工具,那么当然您所能做的就是阅读代码,并思考它是如何执行的 .
是否存在任何极端情况,其中exucution分裂为很少采取的路径,可能无法释放资源?
I / O怎么样,可以失败并导致意外的路径?
当然,不使用任何工具是一个非常奇怪的限制 .
绝对地说,“你不能” .
你怎么能发现这个代码中的泄漏(没有任何意义,它只是让你理解) . 如果用户将1作为命令行参数传递,则代码不会泄漏 . 但是,如果他通过2 ...