【发布时间】:2012-12-08 23:32:44
【问题描述】:
我是 C++ 新手,我正在尝试编写一个使用双指针将两个数组相乘的程序。到目前为止我的代码是:
#include <iostream>
using namespace std;
//multiplies two matrices A(mxl) and B(lxn) to produce C(mxn)
int m,l,n;
int **A, **B, **C;
void main(void)
{
...用户输入 m,l,n 并像这样分配内存。
int i, j;
//creates a new mxl array
A= (int**) new int*[m];
for(i=0;i<m;i++)
{
A[i]=new int[l];
}
//creates a lxn array
B = (int**) new int*[l];
for(i=0;i<l;i++)
{
B[i]=new int[n];
}
//creates a mxn array
C = (int**) new int*[m];
for(i=0;i<n;i++)
{
C[i]=new int[n];
}
int sum = 0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
for(int k=0;k<l;k++)
{
sum =+ A[i][k]*B[k][j];
}
}
//cout<sum<<"\t";
到目前为止一切正常。如果我将其更改为仅 cout 'sum' 那么它将以正确的顺序返回数组的所有正确元素;当我尝试将此值放入数组时,它会返回错误消息。
C[i][j]=sum;
}
}
我确信有一种更好的方法可以将矩阵相乘,但我更想知道为什么这段特定的代码不起作用;它看起来很简单,我看不出错误来自哪里。
【问题讨论】:
-
请发布一个完整的程序来演示这个问题
-
这很可能是为 C 分配内存时出错。请仔细检查创建 C 时的尺寸是否正确。
-
您能否编辑您的答案以显示
B和C的分配?由于这是数组乘法,A是m*l,B是l*n,C必须是m*n。 -
假设最后两段代码在你的程序中是一个单独的块,这里只拆分,可能是因为
j超出了范围。 -
C数组分配完毕
标签: c++