想编写一个计算方阵乘法的函数,在动态分配二维数组的内存时遇到有关问题
想编写一个计算方阵乘法的函数,在动态分配二维数组的内存时遇到问题
代码如下
编译不通过,第一个报错显示函数中动态分配内存那句错了,求高手指点该如何对多维数组进行动态分布。还有如何阻止函数,使其结束时不会收回为数组C分配的内存。
------解决方案--------------------
何必用二维数组呢。。。。少年,直接用一维数组吧。。。
稍微给你提供个传参数模板方法吧,希望你能喜欢吧。。
几乎是用你的方法,只做了个别的改动
代码如下
- C/C++ code
#include<iostream> using namespace std; int *SQUARE_MATRIX_MULTIPLY(int *A,int *B,int n) { int *C=new int[n][n]; for(int i=0;i<=n-1;i++) for(int j=0;j<=n-1;j++) { C[i][j]=0; for(int k=0;k<=n-1;k++) C[i][j]=C[i][j]+A[i][k]*B[k][j]; } return C; } int main() { int A[2][2]={{1,2},{3,4}},B[2][2]={{4,3},{1,2}}; int *C=SQUARE_MATRIX_MULTIPLY(A,B,4); for(int i=0;i<=3;i++) for(int j=0;j<=3;j++) cout<<C[i][j]<<endl; return 0; }
编译不通过,第一个报错显示函数中动态分配内存那句错了,求高手指点该如何对多维数组进行动态分布。还有如何阻止函数,使其结束时不会收回为数组C分配的内存。
------解决方案--------------------
何必用二维数组呢。。。。少年,直接用一维数组吧。。。
稍微给你提供个传参数模板方法吧,希望你能喜欢吧。。
几乎是用你的方法,只做了个别的改动
- C/C++ code
#include<iostream> using namespace std; //模板方阵(ps:如果你还不了解模板是神马东东,请先百度C++模板,看懂了模板再回头看这个代码) template < int M > void SquareMatrixMultiply( int a[M][M], int b[M][M], int d[M][M] ) { //之前的第三个参数可以用M来自动识别, 修改了一下,把数组直接传进来当假参数了 //修改了一下变量名,另外把所有的n都替换成了模板数M for( int i = 0; i < M; i++ ) for( int j = 0; j < M; j++ ) { d[i][j] = 0; for( int k = 0; k < M; k++ ) d[i][j] = d[i][j] + a[i][k] * b[k][j]; } } int main() { //只修改了变量名 int arA[2][2] = { { 1, 2 }, { 3, 4 } } ,arB[2][2] = { { 4, 3 }, { 1, 2 } }; int arD[2][2] = {0}; //把它修改作为参数 //稍微修改函数 SquareMatrixMultiply( arA, arB, arD ); //输出稍微修改了一下 for( int i=0; i < 2; i++ ) { for( int j=0; j < 2; j++ ) cout << arD[i][j] << ','; cout << endl; } return 0; }