我是这个网站的新手,所以如果我以错误的方式提出问题,请原谅。
在我的编程类(class)中,我被要求编写一个函数,该函数将使用指针为我提供两个平方矩阵(3x3)的乘积。
这是我写的代码:
//This function make a LxC matrix out of a double pointer
void matrixMake(double **a,int unsigned l,int unsigned c)
{
a=new double*[l];
for(int i=0;i<l;i++)
{
a[i]=new double[c];
}
}
//This function returns a random number between a and b
double randU(double a=0.0,double b=10.0)
{
double x=(double)(rand()/RAND_MAX);
return(a*x+b*(1-x));
}
//This is the function that seems to be a problem, this function creates a matrix and fills it with random numbers between 0 and 10.
double ** matrixGen()
{
double **matrix;
matrixMake(matrix,3,3);
for(int i=0;i<3;i++)
{
for(int n=0;n<3;n++)
{
matrix[i][n]=randU();
}
}
return(matrix);
}
除非我运行程序,否则它可以编译良好,这给了我一个难看的分割错误。
我尝试调试它,运行
matrix[i][n]=randU();
行时崩溃。它没有给您完整的代码,其余与我的问题无关,并且似乎工作正常。
希望我的问题不会太愚蠢^^ ...在此先谢谢您! :D
最佳答案
发生问题是因为当您将double **matrix
传递给matrixMake
函数时,内存地址被复制了,因此您在该函数内部执行的任何操作都不会坚持您主函数中的double **matrix
。
您可以尝试以下方法:
double ** matrixMake(int unsigned l,int unsigned c)
{
double ** a;
a=new double*[l];
for(int i=0;i<l;i++)
{
a[i]=new double[c];
}
return a;
}
在你的主要功能里面
double **matrix = matrixMake(3,3);
代替
double **matrix;
matrixMake(matrix,3,3);
您也可以尝试通过指针或引用将
double**
传递给matrixMake
,但这会使您成为三星级的程序员,这不是一件好事。无论如何,它看起来像这样:void matrixMake(double ***a,int unsigned l,int unsigned c)
{
*a=new double*[l];
for(int i=0;i<l;i++)
{
*a[i]=new double[c];
}
}
而不是
matrixMake(matrix,3,3);
在您的代码中,您将拥有matrixMake(&matrix,3,3);
关于c++ - 使用2D指针时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34373365/