Arrays 获取PrintArray()函数中的分段错误 类数组 { int-sizeX,sizeY; 整数**数组; 公众: 无效元素() { 对于(int i=0;i
帮我解决这个问题 您正在构造函数中分配动态内存,但从未删除它。这是内存泄漏(但不是崩溃的原因) 您还忽略了实现复制构造函数和赋值运算符,违反了 现在来看实际问题:编译程序(添加缺少的Arrays 获取PrintArray()函数中的分段错误 类数组 { int-sizeX,sizeY; 整数**数组; 公众: 无效元素() { 对于(int i=0;i,arrays,pointers,segmentation-fault,Arrays,Pointers,Segmentation Fault,帮我解决这个问题 您正在构造函数中分配动态内存,但从未删除它。这是内存泄漏(但不是崩溃的原因) 您还忽略了实现复制构造函数和赋值运算符,违反了 现在来看实际问题:编译程序(添加缺少的#include)会产生: class Array { int sizeX, sizeY; int **array; public: void EnterElements() { for(int i = 0; i < sizeX; i++) {
#include
)会产生:
class Array
{
int sizeX, sizeY;
int **array;
public:
void EnterElements()
{
for(int i = 0; i < sizeX; i++)
{
cout << "Enter Elements Of Row:" << i+1 <<endl;
for(int j = 0; j < sizeY; j++)
{
cin >> array[i][j];
}
}
}
Array()
{
sizeX = sizeY = 2;
array = new int*[sizeX];
for(int i = 0; i<sizeX; i++)
{
array[i] = new int[sizeY];
}
}
Array(int x, int y)
{
sizeX = x;
sizeY = y;
array = new int*[sizeX];
for(int i = 0; i<sizeX; i++)
{
array[i] = new int[sizeY];
}
}
Array(Array &t)
{
sizeX = t.sizeX;
sizeY = t.sizeY;
array = new int* [sizeX];
for(int i = 0; i<sizeX; i++)
{
array[i] = new int [sizeY];
}
for(int i = 0; i<sizeX; i++)
{
for(int j = 0; j<sizeY; j++)
{
array[i][j] = t.array[i][j];
}
}
}
void PrintArray()
{
for(int i = 0; i<sizeX; i++)
{
for(int j = 0; i<sizeY; j++)
{
cout << (int)array[i][j] << "\t";
}
cout << endl;
}
}
Array& operator *(Array array2)
{
Array temp(this->sizeY, array2.sizeX);
if(this->sizeY != array2.sizeX)
{
cout << "Cant Multiply" << endl;
return temp;
}
for(int i = 0; i < sizeX; i++)
{
for(int j = 0; j < sizeY; j++)
{
for(int k = 0; k < sizeX && k < sizeY; k++)
{
temp.array[i][j] += this->array[i][k]*array2.array[k][j];
}
}
}
return temp;
}
};
int main()
{
Array a(3,3), b(3,3);
a.EnterElements();
b.EnterElements();
a.PrintArray();
b.PrintArray();
Array c(a*b);
c.PrintArray();
return 0;
}
这个警告来自这里:
t.cc:80:15: warning: reference to local variable ‘temp’ returned [-Wreturn-local-addr]
返回对局部变量的引用是错误的,因为只要操作符*()
返回,引用就不会引用有效的对象,因此程序会显示未定义的行为
修复上述错误后,我们将进入下一个(难以发现的)错误:
void printary()
{
对于(int i=0;i
帮我解决这个问题
您正在构造函数中分配动态内存,但从未删除它。这是内存泄漏(但不是崩溃的原因)
您还忽略了实现复制构造函数和赋值运算符,违反了
现在来看实际问题:编译程序(添加缺少的#include
)会产生:
class Array
{
int sizeX, sizeY;
int **array;
public:
void EnterElements()
{
for(int i = 0; i < sizeX; i++)
{
cout << "Enter Elements Of Row:" << i+1 <<endl;
for(int j = 0; j < sizeY; j++)
{
cin >> array[i][j];
}
}
}
Array()
{
sizeX = sizeY = 2;
array = new int*[sizeX];
for(int i = 0; i<sizeX; i++)
{
array[i] = new int[sizeY];
}
}
Array(int x, int y)
{
sizeX = x;
sizeY = y;
array = new int*[sizeX];
for(int i = 0; i<sizeX; i++)
{
array[i] = new int[sizeY];
}
}
Array(Array &t)
{
sizeX = t.sizeX;
sizeY = t.sizeY;
array = new int* [sizeX];
for(int i = 0; i<sizeX; i++)
{
array[i] = new int [sizeY];
}
for(int i = 0; i<sizeX; i++)
{
for(int j = 0; j<sizeY; j++)
{
array[i][j] = t.array[i][j];
}
}
}
void PrintArray()
{
for(int i = 0; i<sizeX; i++)
{
for(int j = 0; i<sizeY; j++)
{
cout << (int)array[i][j] << "\t";
}
cout << endl;
}
}
Array& operator *(Array array2)
{
Array temp(this->sizeY, array2.sizeX);
if(this->sizeY != array2.sizeX)
{
cout << "Cant Multiply" << endl;
return temp;
}
for(int i = 0; i < sizeX; i++)
{
for(int j = 0; j < sizeY; j++)
{
for(int k = 0; k < sizeX && k < sizeY; k++)
{
temp.array[i][j] += this->array[i][k]*array2.array[k][j];
}
}
}
return temp;
}
};
int main()
{
Array a(3,3), b(3,3);
a.EnterElements();
b.EnterElements();
a.PrintArray();
b.PrintArray();
Array c(a*b);
c.PrintArray();
return 0;
}
这个警告来自这里:
t.cc:80:15: warning: reference to local variable ‘temp’ returned [-Wreturn-local-addr]
返回对局部变量的引用是错误的,因为只要操作符*()
返回,引用就不会引用有效的对象,因此程序会显示未定义的行为
修复上述错误后,我们将进入下一个(难以发现的)错误:
void printary()
{
对于(int i=0;i@ayushkapoor如果答案对你有帮助,请投票表决。如果答案回答了你的问题,请接受它作为答案。@ayushkapoor如果答案对你有帮助,请投票表决。如果答案回答了你的问题,请接受它作为答案。