使用二级指针定义矩阵,方便了矩阵运算,但是如果使用malloc函数进行初始化,空间没有得到及时释放的话,很容易报错,内存访问冲突。解决这个问题的方法就是,不用malloc函数初始化,定义一个指针数组和一个二维数组,通过指针数组将二级指针挂接到二维数组上去,虽然在计算的过程中没有使用到指针数组和二维数组,但是这样避免了指针失效等问题,具体实现的例子如下
定义
Matrix C_bn;
float *pC_bn[3];
float AC_bn[3][3];
挂接
C_bn.p = (float **)pC_bn;
C_bn.rows = 3;
C_bn.cols = 3;
pC_bn[0] = AC_bn[0];
pC_bn[1] = AC_bn[1];
pC_bn[2] = AC_bn[2];
一定要注意维数一致,不然计算中很容易出错。
另外,对于指针这一块,指针不能作为函数返回值,不然指针会失效。切记。所以在编写矩阵的加减乘除运算的时候不要返回一个Matrix类型,里边包含指针,会出错