c+中的内存泄漏+; 我正在上一个C++课程,我需要编写一个简单的程序来泄漏内存。我尝试过创建新的char[]并没有删除它们,但这似乎不起作用。下面是我尝试过的完整代码 #include <iostream> #include <cstring> int main() { int i=1; while (i<1000){ char *data = new char [100000000]; *data = 15; i++; } } #包括 #包括 int main() { int i=1; 虽然(i

c+中的内存泄漏+; 我正在上一个C++课程,我需要编写一个简单的程序来泄漏内存。我尝试过创建新的char[]并没有删除它们,但这似乎不起作用。下面是我尝试过的完整代码 #include <iostream> #include <cstring> int main() { int i=1; while (i<1000){ char *data = new char [100000000]; *data = 15; i++; } } #包括 #包括 int main() { int i=1; 虽然(i,c++,memory-leaks,C++,Memory Leaks,我认为最简单的内存泄漏情况是动态创建一个对象,然后立即丢失对该对象的引用。在这个简短的示例中,您将立即丢失对所创建变量的引用,从而导致内存泄漏。类似这样的小型人工程序中的内存泄漏使得很难理解内存泄漏,因为一旦程序退出,操作系统就会回收程序分配的内存 当程序长时间运行时,问题变得严重。内存泄漏加剧,计算机性能明显受到影响 例如: #include <iostream> // Object is being created, allocated on the heap then fun

我认为最简单的内存泄漏情况是动态创建一个对象,然后立即丢失对该对象的引用。在这个简短的示例中,您将立即丢失对所创建变量的引用,从而导致内存泄漏。类似这样的小型人工程序中的内存泄漏使得很难理解内存泄漏,因为一旦程序退出,操作系统就会回收程序分配的内存

当程序长时间运行时,问题变得严重。内存泄漏加剧,计算机性能明显受到影响

例如:

#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;
}

希望这有帮助,祝你在课堂上好运!

如果你在循环中加入一些延迟,你将能够看到内存的增长。 您可以使用睡眠或等待用户输入

现在,内存膨胀得如此之快,直到分配内存耗尽

这不是一个典型的内存泄漏测试。
内存泄漏在程序结束时进行测试,以查看是否释放了所有内存。

请定义“似乎不工作”检查您的进程内存。它将随着循环的继续而增加。当我观察程序的内存使用情况时,它不会增长,因此不会泄漏任何内存。我只是得到了一个错误的分配错误。@RobSchneider内存分配的速度比您在进程管理器上看到的速度要快……因此,您最终分配了0个或更多~100MB的内存块直到内存分配失败。这种情况发生的速度比你能看到的要快得多。在你的循环中添加一个
std::cerr
,可能还会分配更多更小的块。1000万个100字节的块可以很好地说明这个问题。
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;
}