试图修复我的课堂笔记

时间:2015-11-03 07:55:43

标签: c++

我需要帮助才能让它正常运行。该程序假设显示其中一个索引的数组编号和数字78。尝试运行它时,我没有遇到任何编译器错误,但它立即关闭了程序。

class Vector
{
public:
    Vector (int number_of_elements);  
    int num;
    int *p;
};

int main()
{
    Vector va(10);

    va.p = new int[va.num];

    for (int i = 0; i < va.num; i++)
    {
        va.p[i]=i;

        for (int i = 0; i < va.num; i++)
        {
            cout << va.p[i] << endl;
        }
    }
    Vector vb(va); 


    vb.p[0] = 78;  //if you switch these 3 lines with the 3 above 78 gets printed out everyline
    for (int i = 0; i < vb.num; i++)
    {
        cout << vb.p[i] << endl;
    }
    return 0;
}

Vector::Vector(int number_of_elements)
{
    num = number_of_elements;
}

1 个答案:

答案 0 :(得分:1)

您的代码存在许多问题。

首先,正如@Pavlin所说,添加一个按键以停止控制台终止。

你有内存泄漏。

 va.p = new int[va.num];
 you have to delete it like this
 delete[] va.p

第二个问题在这里:

 Vector vb(va); 

此语句从现有对象创建对象。它使用一种称为复制构造函数的特殊函数。由于你有动态分配的内存,你必须提供你自己的复制构造函数,如下所示:

Vector(const& Vector tmp) { // code here);

否则它会复制指针而不是值。它是一个浅拷贝,但你需要一个深拷贝,

强烈建议当你在类中使用指针时添加一个析构函数来删除已分配的内存。