首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++中析构函数失误,Damage:after normal block,找了好久,没有溢出啊

2013-04-21 
C++中析构函数出错,Damage:after normal block,找了好久,没有溢出啊。#include iostreamusing namespace

C++中析构函数出错,Damage:after normal block,找了好久,没有溢出啊。
#include <iostream>
using namespace std;
#include "cmath"

#define N 10


double score[] = {1,2,3,4,5,6,7,8,9,10} ;
class ZScore
{
public:
    ZScore(double tmp_score[], double tmp_a, double tmp_b) ;
    //~ZScore() ;
void free() ;
    void CalZScore() ;
    double GetAbility(int i) ;

private:
double *Score ;
    double *Ability ;
    double var_a ;
    double var_b ;
    double avg_x ;
    double tmp_sum ;
    double tmp_s ;

};

ZScore::ZScore(double tmp_score[], double tmp_a, double tmp_b)
{
    Score = tmp_score ;
    Ability = new double(sizeof(score) / sizeof(double)) ;
    var_a = tmp_a ;
    var_b = tmp_b ;
    avg_x = 0 ;
    tmp_s = 0 ;
    tmp_sum = 0 ;
}


/*ZScore::~ZScore()
{
    delete [] Ability ;
cout<<"Destruction succeed!"<<endl ;
}*/
void ZScore::free()

delete [] Ability ;
}


double ZScore::GetAbility(int i)
{
    return Ability[i] ; 
}


// 计算各学生标准分

void ZScore::CalZScore()
{
    for ( int i = 0; i < N; i++)  // 计算全体学生总分
{
    tmp_sum += Score[i] ;
}

    avg_x = tmp_sum / N ;  // 计算平均分

    for ( i = 0; i< N; i++)     // 计算方差
{
    tmp_s += pow((Score[i] - avg_x),2) ;
}

    tmp_s = sqrt(tmp_s / N) ;  // 计算标准差

for ( i = 0; i < N; i++)  // 计算标准分Z,进行将标准分进行线性转换,并存入Ability数组
{
    Ability[i] = (Score[i] - avg_x) / tmp_s ;  
Ability[i] = var_a * Ability[i] + var_b ;  
}

/*for ( i = 0; i < N; i++)  // 计算标准分Z,进行将标准分进行线性转换,并存回原数组Score
{
    Score[i] = (Score[i] - avg_x) / tmp_s ;  
Score[i] = var_a * Score[i] + var_b ;  
}*/
}
int main()
{
    ZScore zscore(score,1,1) ;
    zscore.CalZScore() ;
for ( int i = 0; i < N; i++)
{
    cout<<"score["<<i<<"] is "<<score[i]<<endl;
}

for ( i = 0; i < N; i++)
{
    cout<<"Ability["<<i<<"] is "<<zscore.GetAbility(i)<<endl;


}

    zscore.free() ;

return 0;
}
[解决办法]
Ability = new double(sizeof(score) / sizeof(double)) ;

你知道这是什么吗?
这是 new 1 个double, 它的值是 10
改成
Ability = new double[sizeof(score) / sizeof(double)] ;

热点排行