有没有一种方法可以静态分析C中的内存分配?

时间:2020-04-30 16:44:10

标签: c pointers memory-management static-analysis

如果在函数中动态分配了一块内存,则必须在函数中将其释放,否则指向该内存的指针必须退出该函数。因此,我认为应该可以在静态分析期间跟踪指向函数中分配的内存的指针,并且如果指针没有脱离函数并且其内存没有被释放,则分析器应该抛出错误。 / p>

在C语言中,不知道哪个函数将指针输出到分配的内存。因此,为了使此分析起作用,它也应该分析该函数中调用的所有函数。

有时候,跟踪指针并不是一件容易的事,例如,如果将指向一块已分配内存的指针放置到数组中,并且以一种难以计算的方式将数组改组。然后,如果无法跟踪指针,则分析器可能会发出警告。但是,该分析将有助于检查该函数是否在不清理的情况下结束(关闭文件并释放临时数组)。

如果函数声明包含有关函数可以输出指向已分配内存的指针的方式的信息,则分析将更容易,这与Java方法调用中如何包含抛出异常的信息类似。那不是用C语言编写的,而是有一种语言具有函数声明,其中包含有关函数如何输出指向已分配内存的指针的信息?函数声明可能看起来像这样:

void* malloc(size_t size) allocates return;

// this function creates an array of unknown size and writes it to *dest,
// returns the size of the array
size_t createArray(int** dest) allocates *dest;

0 个答案:

没有答案
相关问题