C++中的动态多维数组
Dynamic Multidimensional array in C++
我使用动态多维数组在c++中制作了矩阵乘法程序。问题是当我输入测试值时矩阵A=row1{1},row2{2}矩阵B=row1{1,2,3},它在用户所在的循环中停止工作输入第一个数组的值,我使用调试找到了它。但当我进入时程序运行良好矩阵A=行1{1,2},行2{3,4}矩阵B=行1{5,6},行1{7,8}
我希望这个程序是一个通用程序,可以乘以所有矩阵
#include <iostream>
using namespace std;
class Lab_02
{
public:
void Product(){
int a1Rows, a1Columns;
int a2Rows, a2Columns;
cout << "Plz Enter the no. of rows for Array 1 :";
cin >> a1Rows;
cout << "Plz Enter the no. of columns for Array 1 :";
cin >> a1Columns;
cout << "Plz Enter the no. of rows for Array 2 :";
cin >> a2Rows;
cout << "Plz Enter the no. of columns for Array 2 :";
cin >> a2Columns;
int **dynamicArray = 0;
int **dynamicArray2 = 0;
int **dynamicArray3 = 0;
cout << endl;
for (int i = 0; i < a1Rows; i++)
{
dynamicArray3 = new int *[a1Rows];
}
for (int i = 0; i < a2Columns; i++)
{
dynamicArray3[i] = new int[a2Columns];
}
// memory allocated for elements of rows.
for (int i = 0; i < a1Rows; i++)
{
dynamicArray = new int *[a1Rows];
}
// memory allocated for elements of each column.
for (int i = 0; i < a1Columns; i++)
{
dynamicArray[i] = new int[a1Columns];
}
// memory allocated for elements of rows.
for (int i = 0; i < a2Rows; i++)
{
dynamicArray2 = new int *[a2Rows];
}
// memory allocated for elements of each column.
for (int i = 0; i < a2Columns; i++)
{
dynamicArray2[i] = new int[a2Columns];
}
cout << "enter the values or array 1 n";
for (int i = 0; i < a1Rows; i++)
{
for (int j = 0; j < a1Columns; j++)
{
cout << "array[" << i << "][" << j << "]t";
cin >> dynamicArray[i][j];
}
}
cout << "enter the values or array 2 :n";
for (int i = 0; i < a2Rows; i++)
{
for (int j = 0; j < a2Columns; j++)
{
cout << "array[" << i << "][" << j << "]t";
cin >> dynamicArray2[i][j];
}
}
int sum;
for (int i = 0; i < a1Rows; i++)
{
for (int j = 0; j < a1Columns ; j++)
{
sum = 0;
for (int k = 0; k < a2Columns ; k++)
{
sum = sum + (dynamicArray[i][k] * dynamicArray2[k][j]);
}
dynamicArray3[i][j] = sum;
}
}
cout <<"Result" << endl << endl;
for (int i = 0; i < a1Rows; i++)
{
for (int j = 0; j < a2Columns; j++)
{
cout << dynamicArray3[i][j] << "t";
}
cout << endl;
}
}
};
void main(void)
{
Lab_02 object;
object.Product();
}
你的高考内存分配是个问题。将它们更改为类似以下的内容
// memory allocated for elements of rows.
dynamicArray = new int *[a1Rows];
// memory allocated for elements of each column.
for (int i = 0; i < a1Rows; i++)
{
dynamicArray[i] = new int[a1Columns];
}
您需要为行分配一个数组,然后在行上循环并分配列。
代码的问题是不应该在循环中分配"行"。您只需要为行进行一次分配,然后循环为每一行分配数据。
例如,代替这个:
for (int i = 0; i < a1Rows; i++)
{
dynamicArray = new int *[a1Rows];
}
// memory allocated for elements of each column.
for (int i = 0; i < a1Columns; i++)
{
dynamicArray[i] = new int[a1Columns];
}
正确的方法是:
dynamicArray = new int *[a1Rows];
for (int i = 0; i < a1Columns; i++)
{
dynamicArray[i] = new int[a1Columns];
}
你在每个循环中都犯了同样的错误。
还有一些要点:
- 无法解除分配已分配的内存
- 如果您使用
std::vector
,那么事情会变得容易得多 在执行
sum
循环之前,您需要检查矩阵是否是可多重分解的。由multiplyable
表示矩阵A和B的列和行的数量满足A和B相乘的要求。for (int i = 0; i < a1Rows; i++) { for (int j = 0; j < a1Columns; j++) { sum = 0; for (int k = 0; k < a2Columns; k++) sum = sum + (dynamicArray[i][k] * dynamicArray2[k][j]); dynamicArray3[i][j] = sum; } }
如果dynamicArray1
和dynamicArray2
在相乘之前没有必要的列和行数,则此循环将失控。
首先,在相乘之前应进行以下测试:
if (a1Columns != a2Rows)
return;
其次,您的k
循环错误。应该是这样的:
for (int k = 0; k < a2Rows; k++)
sum = sum + (dynamicArray[i][k] * dynamicArray2[k][j]);
dynamicArray3[i][j] = sum;
相关文章:
- std::向量与传递值的动态数组
- 将数组动态分配到具有指针参数的函数中
- 我可以以某种方式使我的矢量/数组动态更改装置数量吗?
- 使用 new: "potentially uninitialized pointer"将对象数组动态分配给指针
- 为什么C 没有方便的方式来为多维数组动态分配内存
- 如何制作具有动态大小的数组?动态数组的一般用法(可能还有指针)
- c++中的数组动态内存分配
- 多维数组动态分配的内存图
- 如何在 c++ 中使用 2-D 固定数组为 4-D 数组动态分配内存
- C++ 我在数组/动态内存方面遇到了一些问题
- C++ 中从数组动态强制转换
- C++中高维数组动态内存分配的正确方法.
- 从 C++ 结构中包含的指针数组动态分配和访问内存
- 对象数组动态内存分配
- 为二维数组动态分配内存时出错
- 如何将2d数组动态分配给结构
- 为结构数组c++动态分配内存
- 将数组动态添加到多维数组
- 类中的类数组-动态数组(c++)有问题
- 分配对象数组动态冻结