我想在我的应用程序中模拟内存泄漏.我写下面的代码,并试图在perfmon中看到.
int main() { int *i; while(1) { i = (int *) malloc(1000); //just to avoid lazy allocation *i = 100; if(i == NULL) { printf("Memory Not Allocated\n"); } Sleep(1000); } }
当我在任务管理器中看到使用过的内存时,它在52K和136K之间波动,但不会超过它.手段,有些东西它显示52K,有时136K,我不明白这个代码一旦达到136K,回到52K,并没有超越那个.
我尝试使用perfmon,但不能准确地在perfmon中看到什么,计数器的快照,
请建议如何模拟内存泄漏以及如何检测它.
解决方法
严格地说,内存泄漏是依赖于上下文的:程序中的某些内容会随着时间的推移不断分配内存,而不应释放它,而它应该被释放.
您的代码会在每次后续遍历while循环时产生“泄漏”,因为您的程序在该点失去了先前分配的指针的知识.这仅在检查中可见,但在这种情况下;从发布的代码来看,它看起来更像是你实际上在做的事情,尽管很慢,正试图创造一种记忆压力的情况.
要在没有检查的情况下“找到”泄漏,您需要运行像valgrind(Unix / Linux / OSX)这样的工具,或者在Visual Studio中使用DEBUG_NEW宏启用allocation tracing并使用调试器查看输出.
如果你真的想急着强调内存,一次分配1024 x 1024 x 1024字节……