在此C ++代码中,sizeof(ar)不能帮助我查找cols和rows变量,并且总是给我相同的错误cols和rows。如何在不将sizeX和sizeY变量传递给IsMagicSquare(arr)函数的情况下找到矩阵的大小?您可以帮助我了解此问题并找到解决方法吗?
int main()
{
int sizeX, sizeY;
cout << "Size of Matrix:";
cin >> sizeX >> sizeY;
int** arr = new int* [sizeY];
for (int i = 0; i < sizeY; ++i)
{
arr[i] = new int[sizeX];
}
cout << "Elements of the Matrix:";
for (int i = 0; i < sizeX; i++)
for (int j = 0; j < sizeY; j++)
cin >> arr[i][j];
if (IsMagicSquare(arr))
{
for (int i = 0; i < sizeX; i++)
{
cout << "\n";
for (int j = 0; j < sizeY; j++)
cout << arr[i][j];
}
}
else
{
for (int i = 0; i < sizeY; i++)
{
delete[] arr[i];
}
delete[] arr;
}
return 0;
}
bool IsMagicSquare(int** ar)
{
int rows = sizeof (ar)/ sizeof (ar[0]);
int cols = sizeof (ar[0]) / sizeof(int);
cout << rows << cols;
if (rows == cols)
{
int* ver = new int[rows]();
int* hor = new int[cols]();
int cross0=0;
int cross1=0;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
hor[i] += ar[i][j];
ver[j] += ar[i][j];
if (i == j)
cross0 += ar[i][j];
else if ((i+j) == cols)
cross1 += ar[i][j];
}
}
if (cross0 != cross1)
return false;
else
{
for (int i = 0; i < rows; i++)
if ((cross0 != ver[i]) || (cross1 != hor[i]))
return false;
}
}
else
return false;
return true;
}
只需合计您为合理的估算而做出的分配:
sizeY * sizeof(int*)
。sizeY * sizeX * sizeof(int)
当然,您在IsMagicSquare()
中获得的大小计算将不起作用:sizeof
对类型而不是实际分配的内存进行运算。该信息会丢失,无法从指针中恢复。最好使用std::vector<std::vector<int>>
。它处理自动内存分配,并跟踪结构的大小。