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 支持它。这将是 运行 次警告。
所以问题很简单,有没有办法告诉 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 支持它。这将是 运行 次警告。