我是这个网站的新手,所以如果我以错误的方式提出问题,请原谅。

在我的编程类(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/

10-09 06:37