c ++析构函数崩溃程序

时间:2016-04-17 20:09:00

标签: c++ class destructor

我创建了一个程序,它从同一个类的2个对象中减去两个数组,然后将它们放在一个新数组中并显示它们。程序一直工作到他崩溃的结束。我认为它是析构函数,因为如果我删除程序退出通常我不知道为什么我认为我正确地分配了内存...

#include <iostream>
using namespace std;

class math{
private: 
    float *tab;
    float *result;
    int size;
public:
    math(int n);
    void subtract(math,int);
    void afis(){
        cout<<"Result of subtraction: ";
        for(int i=0;i<size;i++)
            cout<<result[i]<<",";
    }
    ~math(){delete []tab;delete []result;} //if i remove this program exit normally
};

math::math(int n){
    cout<<"Write elements: ";
    tab=new float[n];
    result=new float[50];
    for(int i=0;i<n;i++)
        cin>>*(tab+i);
}

void math::subtract(math y,int x){ //if i dont call this the program exit normally with destructor
    size=x;
    for(int i=0;i<x;i++)
        result[i]=tab[i]-y.tab[i];
}


    void main(void){


int n1,n2;
    cout<<"Write elements of sir1: ";
    cin>>n1;
    math sir1(n1);
    cout<<"Write elements of sir2: ";
    cin>>n2;
    math sir2(n2);
    sir1.subtract(sir2, n1<n2 ? n1:n2); //also if i comment this line the program exit normally with or without destructor
    sir1.afis();
    cin.ignore();
    cin.get();
}

PS:我调试我的代码,似乎析构函数是同一个对象的两次调用。这个析构函数就在减去函数和最后两个析构函数之前,总共有3个析构函数而不是2个。我不明白为什么。 PS2:我通过使用数学和放大来解决我的问题减去而不是数学中的参数,但我不知道为什么这称为析构函数。现在我的程序正常使用删除。但有人可以给我一个解释吗?

0 个答案:

没有答案