我正在上c ++课程,我需要编写一个故意泄漏内存的简单程序。我通过创建new char []
而不删除它们来尝试这个,但这似乎不起作用。以下是我尝试的完整代码。
#include <iostream>
#include <cstring>
int main()
{
int i=1;
while (i<1000){
char *data = new char [100000000];
*data = 15;
i++;
}
}
当我观察程序的内存使用情况时,它不会增长,因此它不会泄漏任何内存。我刚收到错误的分配错误。
答案 0 :(得分:2)
我认为最简单的内存泄漏情况是动态创建一个对象,然后立即丢失对它的引用。在这个简短的示例中,您将立即丢失对您创建的变量的引用,从而导致内存泄漏。像这样的小型设计程序中的内存泄漏使得很难理解内存泄漏,因为一旦程序退出,操作系统就会回收程序分配的内存。
程序运行很长一段时间后问题变得严重。内存泄漏加剧,计算机性能明显受到阻碍。
示例:
#include <iostream>
// Object is being created, allocated on the heap then function immediately exits, losing any reference to the object. This is a memory leak
void createObject()
{
int* x = new int;
}
int prompt()
{
int response;
std::cout << "Run again?\n";
std::cin >> response;
return response;
}
int main()
{
while(continue)
{
createObject();
// Running the program again and again will exacerbate the memory leak.
continue = prompt();
}
return 0;
}
在这个人为的,无用的例子中保留对象引用的正确方法:
int* createObject()
{
int* x = new int;
return x;
}
int main()
{
// Pointer to the object created in the function in this scope is created, so we still have access to the variable.
int* a = createObject();
return 0;
}
希望这会有所帮助,祝你班上好运!
答案 1 :(得分:0)
如果你在循环中加入一些延迟,你将能够看到内存增长。 您可以使用睡眠或等待用户输入。
就像现在一样,内存膨胀得如此之快,直到用完分配内存为止。
这不是内存泄漏的经典测试。 在程序结束时测试的内存泄漏是否释放了所有内存。