首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试着修改我的课堂笔记

试着修改我的课堂笔记
EN

Stack Overflow用户
提问于 2015-11-03 15:55:43
回答 1查看 46关注 0票数 0

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

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

发布于 2015-11-03 16:06:00

你的代码有很多问题。

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

你有一个内存泄漏。你有

代码语言:javascript
复制
 va.p = new int[va.num];
 you have to delete it like this
 delete[] va.p

第二个问题是:

代码语言:javascript
复制
 Vector vb(va); 

此语句从现有对象创建对象。它使用一个特殊的函数,称为复制构造函数。因为你有动态分配的内存,所以你必须像这样提供你自己的拷贝构造函数:

代码语言:javascript
复制
Vector(const& Vector tmp) { // code here);

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

当你在一个类中使用指针时,最好添加一个析构函数来删除分配的内存。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33493976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档