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)] ;