查看: 603  |  回复: 2

lixy1217

木虫 (著名写手)

[求助] 关于C++析构函数出现的问题

这是代码,用于计算两个向量的加法。#include "iostream.h"

#include "iostream.h"

class vector
{
public:
        int n;
        double*v;
        vector(int a=0)
        {
          if(a>0)
          {  v=new double[a];  n=a;  }
          else{  n=0;  v=NULL;  }
        }
        friend vector operator+(vector&a,vector&b)
        {
                int i;
                vector c;
                if(a.n!=b.n)  {cerr<<"Error!!!"<                 c.n=a.n;
                c.v=new double [a.n];
        for(i=0;i                         c.v[ i ]=a.v[ i ]+b.v[ i ];
                return c;
        }
        void operator=(vector &c)
        {
          int i;
          cout<<"???"<           n=c.n;  v=new double[n];
          for(i=0;i           {  v[ i ]=c.v[ i ];  }
        }
        ~vector()
        {
          cout<<"n="<           if(n>0)  delete[]v;
          v=NULL;
          n=0;
        }
};

void main()
{
  vector f1(2),f2(2),f3;
  f1.v[0]=1.0;
  f1.v[1]=1.0;
  f2.v[0]=2.0;
  f2.v[1]=2.0;
  f3=f1+f2;
  cout<<"f3.n="<   cout< }
结果输出为
n=2
???
n=2
f3.n=2
-1.45682e+144
n=2
同时出现了指针错误。
与网上一些关于矩阵向量的程序包对比后,没有发现什么明显错误。很明显出自于对析构函数的应用,可是却不知问题具体在哪里,如何修改。

目前的办法只能在类中增加一个判定型变量,然后以此确定对象是否执行析构,但这样显然不符合C++的初衷。

[ 来自科研家族 皇家数理科学协会 ]

[ Last edited by lixy1217 on 2012-12-6 at 22:06 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

偶尔敞开心扉,世界将不再孤独
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
lixy1217: 金币+5, ★★★很有帮助, 我用的是VC++6.0,难道又是因为版本问题?而且在库函数\"iostream\"中不能重载输出流<< 2012-12-07 09:24:22
什么编译器,vs2008没问题
CODE:
#include
using namespace std;
class vector
{
public:
        int n;
        double*v;

        vector(int a=0)
        {
          if(a>0)
          {  v=new double[a];  n=a;  }
          else{  n=0;  v=NULL;  }
        }

        friend vector operator+(vector&a,vector&b)
        {
                int i;
                vector c;
                if(a.n!=b.n)  {cerr<<"Error!!!"<                 c.n = a.n;
                c.v = new double[c.n];
                for(i=0;i                         c.v[ i ]=a.v[ i ]+b.v[ i ];
                return c;
        }
        void operator=(vector &c)
        {
          int i;
          cout<<"="<           n=c.n;
          v = new double[c.n];
          for(i=0;i           {  v[ i ]=c.v[ i ];  }
        }
        ~vector()
        {
          cout<<"n="<           if(n>0)  delete[]v;
          v=NULL;
          n=0;
        }
};

void main()
{
  vector f1(2),f2(2),f3;
  f1.v[0]=1.0;
  f1.v[1]=1.0;
  f2.v[0]=2.0;
  f2.v[1]=2.0;
  f3=f1+f2;
  cout<<"f3.n="<   cout< }

结果
CODE:
n=2
???
n=2
f3.n=2
3
n=2
n=2
n=2

Process returned 0 (0x0)   execution time : 0.043 s
Press any key to continue.

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2012-12-06 22:46:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wangww2011

木虫 (著名写手)

引用回帖:
2楼: Originally posted by libralibra at 2012-12-06 22:46:18
什么编译器,vs2008没问题
#include <iostream>
using namespace std;
class vector
{
public:
        int n;
        double*v;

        vector(int a=0)
        {
          if(a>0)
     ...

没有问题?gcc version 4.7.2 (Ubuntu/Linaro 4.7.2-2ubuntu1) 结果如下
CODE:
test.cpp:45:11: error: ‘::main’ must return ‘int’
test.cpp: In function ‘int main()’:
test.cpp:52:9: error: no match for ‘operator=’ in ‘f3 = operator+(vector&, vector&)((* & f2))’
test.cpp:52:9: note: candidate is:
test.cpp:27:14: note: void vector::operator=(vector&)
test.cpp:27:14: note:   no known conversion for argument 1 from ‘vector’ to ‘vector&’

To楼主,人生苦短,尽可能的用python吧
3楼2012-12-07 00:40:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lixy1217 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[硕博家园] 极限拉扯,如何抉择 +6 Isak0320 2026-10-12 8/400 2026-10-12 20:09 by caixiaoye1
[基金申请] 入职后第一次管课题组的专利缴费,对账才发现官费比别人多掏了一倍 +6 13108017953 2026-10-08 6/300 2026-10-12 20:07 by w3w3y3
[有机交流] OpenAI又攻克数学难题了,离AI做有机合成还有多远? +4 wangyl_123 2026-10-10 8/400 2026-10-12 18:09 by wangyl_123
[教师之家] 课题组会帮你通过考核么? +3 好运来~9527 2026-10-10 6/300 2026-10-12 14:55 by 简单化xn
[公派出国] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:34 by XQNyDCa1Tk5n
[找工作] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 22:26 by XQNyDCa1Tk5n
[公派出国] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 22:26 by XQNyDCa1Tk5n
[考博] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:15 by XQNyDCa1Tk5n
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 22:11 by XQNyDCa1Tk5n
[基金申请] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +5 qR2AdCWTVtkw 2026-10-09 9/450 2026-10-11 22:06 by XQNyDCa1Tk5n
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 (EPI+-1)(金币-50) +5 qR2AdCWTVtkw 2026-10-09 10/500 2026-10-11 14:25 by VOMexwnDzOFZ
[教师之家] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 (EPI+-1)(金币-50) +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 14:05 by VOMexwnDzOFZ
[考研] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:51 by VOMexwnDzOFZ
[硕博家园] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +5 qR2AdCWTVtkw 2026-10-09 8/400 2026-10-11 13:45 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +3 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:54 by VOMexwnDzOFZ
[找工作] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +4 qR2AdCWTVtkw 2026-10-09 7/350 2026-10-11 10:34 by VOMexwnDzOFZ
[考博] 招收博士生一名 +3 mandolin 2026-10-10 3/150 2026-10-11 10:21 by 不是山谷!
[公派出国] 售SCI一区T0P文章,我:8O.55.1.O.54,科目全,可伽急 +4 qR2AdCWTVtkw 2026-10-09 4/200 2026-10-11 03:14 by M0zrYVSAnxpE
[有机交流] 各位大佬,路线设计求助 +6 zapen 2026-10-08 8/400 2026-10-10 15:59 by zapen
[有机交流] 我应该选哪条合成路线让实验成功率高一些? +5 jing816y 2026-10-08 9/450 2026-10-10 09:05 by zapen
信息提示
请填处理意见