这是我第一次使用工具来管理我的程序,我想通过一些简单的尝试来理解它是如何工作的:
int main(){
int a;
scanf("%d",&a);
}
并且在执行valgrind之后说有1个alloc,1个free是可以的。然后我这样做了:
int main(){
int a,b;
scanf("%d%d",&a,&b);
}
执行后valgrind仍然说1分配,1免费。为什么?我没有分配内存2次,在我的程序中加2个内存?我预计它会说2分2免费
Valgrind跟踪所有内存分配(包括由C库生成的内存分配)。
标准I / O实现(例如scanf
和printf
)将分配缓冲区供内部使用,这可能就是您所看到的。