繁体   English   中英

该程序会导致内存泄漏吗

[英]Will this program cause memory leak

我问我的朋友在被这个线程吸引后,是否可以在不使用循环或条件的情况下从1打印到1000:

无循环或有条件打印1至1000

他回答了这个程序。

#include <iostream>
using namespace std;

static int n = 1;

class f {
public:

    f() {
        cout << n++ << endl;
    }
};

int main(int argc, char *argv[]) {
    f n [1000];
}

运行程序输出确定。 但是,当我在netbeans上关闭程序时,它似乎仍在运行并正在消耗内存。 程序是否引起内存泄漏? 有人可以解释这个小程序如何工作吗?

但是,当我在netbeans上关闭程序时,它似乎仍在运行并消耗内存

当您关闭程序或终止程序时,无论它是否有内存泄漏,都将释放内存。 我很确定您没有正确终止它。

程序是否引起内存泄漏?

不,如果不使用newmalloc (直接或间接),则不会发生内存泄漏

有人可以解释这个小程序如何工作吗?

fn [1000]; 尝试创建一个包含1000个f对象的向量。 当它们被初始化时,构造函数被调用,打印n并将其递增。

不,没有内存泄漏。

阵列使用自动存储,它们在超出范围时会自动释放。

通过new使用动态存储导致内存泄漏:

int main(int argc, char *argv[]) {
    new f[1000]; // this leaks
}

有人可以解释这个小程序如何工作吗?

构造数组将为数组的每个元素调用默认构造函数。 因此, f()仅被调用1000次。

您甚至不必关闭程序,它会自动终止。 必须是您的IDE可以执行的操作,或者您可以使用的任何操作。

这个怎么运作? 类“ f”具有一个构造函数,该构造函数增加全局变量并将其输出。 他创建了一个包含1000个“ f”实例的数组,这导致以上情况发生1000次,对于数组中的每个“ f”都发生一次。

每当这样做

f n[i]

构造函数被f()调用。 因为每次调用都会增加全局变量。 因此,对于从1到1000的f的每个对象,将打印n的值。

关于内存泄漏,没有。 该数组是一个局部变量,在程序结束时被销毁。 为了启用动态分配,请使用new关键字。

程序中没有明显的内存泄漏。 您不会动态分配任何对象,也不会忘记释放任何对象。

确实发生的是,您为数组n调用了数组构造函数。 这本身称为恐惧每个数组元素的构造函数f :: f()。 因此,您得到输出。 好了,您有一个循环,但没有语言水平。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM