gpt4 book ai didi

当我尝试使用我在派生类中创建的函数时,检测到 C++ 堆损坏

转载 作者:行者123 更新时间:2023-11-28 07:37:14 24 4
gpt4 key购买 nike

<分区>

这是我的代码。首先我定义了三个类

类矩阵{ protected :
双 *mdata;
int 行,列;

class polyg{protected: 矩阵 x,y,z,centre;

类三角形:public polyg{protected:public:
三角形(矩阵 x1,矩阵 y1,矩阵 z1){x=x1;y=y1;z=z1;
centre=(x+y+z).change_scale(1/3);
}

我已经为矩阵乘法定义了一个重载函数,例如

matrix operator*(matrix &m) const{
if(columns!=m.getrows()) {
cout<<"invalid size!!"<<endl; exit(1);
}
matrix temp(rows,m.getcols());
for(int x=0; x<rows; x++) {
for(int y=0; y<m.getcols(); y++) {
double value = 0;
for(int z=0; z<columns; z++) {
value = value+(mdata[index(x+1,z+1)]*m.mdata[index(z+1,y+1)]);
}
temp.mdata[index(x+1,y+1)] = value;
}
}
return temp;}

索引函数定义为

int index(int m, int n) const // Return position in array of element (m,n){
if(m>0 && m<=rows && n>0 && n<=columns) return (n-1)+(m-1)*columns;
else {cout<<"Error: out of range"<<endl; exit(1);}

并且我定义了成员函数,它覆盖了polyg类中的纯虚函数,在triangle类中如

    void rotate(double angle){

double pi=4*atan(1.0);
double angle_rad=pi*angle/180;

matrix m_rot(2,2);
m_rot(1,1)=cos(angle_rad);
m_rot(1,2)=sin(angle_rad);
m_rot(2,2)=cos(angle_rad);
m_rot(2,1)=-sin(angle_rad);//matrix of rotation of angle inserted

x=m_rot*x;
y=m_rot*y;
z=m_rot*z;//rotating the triangle

}

问题发生在

x=m_rot*x;
y=m_rot*y;
z=m_rot*z;

这部分。 Heap corruption detected 错误从这部分发生。如果我删除这部分,代码运行完全没有任何问题。

此外,如果我在 main 中定义

int main(){matrix a,b,c; c=a*b;

它也很好用。

但是,如果我使用我在 triangle 类中创建的函数,例如,

triangle tri(a,b,c); tri.rotate(30);

出现问题

调试前没有出现错误但是在我编译之后,发生堆损坏检测错误

谁能解释一下是什么问题?以及如何解决?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com