| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1379 人关注过本帖
标题:求助大佬!纠正bug
取消只看楼主 加入收藏
复旦
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:81
专家分:124
注 册:2018-10-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
求助大佬!纠正bug
设计了一个矢量类。运行后,构造函数里声明element后element的地址是0xcccccccc。 然后出错无法读取该内存地址。
这个错误有时候还会在拷贝构造函数里面出现。 不知道为什么拷贝构造函数被调用了。   请大佬纠正问题。

#include "stdafx.h"
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <cstdarg>

typedef class myvector
{
public:
    myvector()    //0参数构造函数
    {
        element=new double[3];
        for (int i=0;i<3;i++)
            element[i]=0;
    }
    myvector(int count,...)    //N参数构造函数
    {
        N=count;
        element=new double[N];              //这里出错   element地址为Oxccccccc//
        va_list ap;
        va_start (ap,count);
        for (int i=0;i<N;i++)
        {
            element[i]=va_arg(ap,double);
        }
        va_end(ap);
    }
    myvector(const myvector& n)   //拷贝构造函数
    {
        N=n.N;
        if (element !=NULL)
            delete[] element;                         //有时候这里出错。 同样element地址是0xcccccccc。 显示无法读取该内存地址//
        element=new double[N];
        for (int i=0;i<N;i++)
            element[i]=n.element[i];
    }
    ~myvector()    //析构函数
    {
        delete[] element;
    }
    myvector operator + (const myvector& other)   //重载+操作符
    {
        myvector result;
        for (int i=0;i<N;i++)
            result.element[i]=element[i]+other.element[i];
        return result;
    }

    myvector operator - (const myvector& other)   //重载-操作符
    {
        myvector result;
        for (int i=0;i<N;i++)
            result.element[i]=element[i]-other.element[i];
        return result;
    }

    myvector operator * (int n)   //重载*操作符(矢量*数)
    {
        myvector result;
        for (int i=0;i<N;i++)
            result.element[i]=element[i]*n;
        return result;
    }

    void print()     //输出函数
    {
        printf ("(");
        for (int i=0;i<N;i++)
            printf ("%.3f ",element[i]);
        printf (")\n");
    }

    void SetDim(int i)     //维度设置函数
    {
        N=i;
        for (int j=0;j<N;j++)
            element[j]=0;
    }

public:
    int N;
    double * element;
}Vector;

int main()
{
    int i;
    Vector a(2,5.6,4.5),b(2,4.5,7.4);
    Vector c;
    c=a+b;
    a.print();
    b.print();
    c.print();
    scanf ("%d",&i);
    return 0;
}
搜索更多相关主题的帖子: element for int i++ result 
2018-10-30 13:52
复旦
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:81
专家分:124
注 册:2018-10-29
收藏
得分:0 
非常感谢rjsp大佬的错误纠正!
可以正常运行了。
还有,可以说明std命名空间的概念和 =操作符重载后写的“这里应该加上 Vector( Vector&& other ) 和 Vector& operator=( Vector&& other )”
这句话的含义吗?
2018-10-30 19:48
复旦
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:81
专家分:124
注 册:2018-10-29
收藏
得分:0 
回复 3楼 rjsp
如果想构造函数实参里只允许输入数值,不允许bool,char类型的话,要怎么设计throw, try, catch?
还有,目前的代码实行 Vector (3,2,5,6)的话, 因为2,5,6是int型所以构造函数里不执行正确的赋值。这个要怎么办呢?

2018-10-30 20:45
复旦
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:81
专家分:124
注 册:2018-10-29
收藏
得分:0 
Jonney大佬,我不太会写处理异常代码。
麻烦您可以写个完整的吗?
对任何一个函数,写一个完整异常处理代码就行。
谢谢!
2018-10-30 23:08
复旦
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:81
专家分:124
注 册:2018-10-29
收藏
得分:0 
非常感谢。我看一段时间,有问题再来问您。
2018-10-31 13:15
快速回复:求助大佬!纠正bug
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017386 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved