GCC 对未释放的堆块发出警告

GCC warn for non-freed heap blocks

所以问题很简单,有没有办法告诉 GCC 如果我不释放堆分配的块,我想得到警告?我知道我们可以为某些 purposes/we 已经到达程序末尾或类似的东西设置非释放块。

int main(){
    int *a = malloc(sizeof(int));
    return 0;
}

如果我能得到一个警告,那就太棒了。

编译器无法预测和警告未释放的块。这是运行时作业,而不是编译时。您可以实现自己的 malloc-free-check 子系统或修改内存管理库。

这不是 GCC 可以完成的工作。静态分析无法证明 free 被遗忘,这是 运行 时间分析器的工作,例如 valgrind's memcheck, or eventually gcc -fsanitize=leak, which I haven't seen there yet, only with clang -fsanitize=leak.

但您不会收到编译时警告,即使 gcc 或 clang 支持它。这将是 运行 次警告。