使用2D指针时出错
error using 2D pointers
我是这个网站的新手,如果我问错了问题,请原谅。
在我的编程课程中,我被要求编写一个函数,该函数将使用指针给出两个平方矩阵(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
除了校正matrixMake
:的签名
void matrixMake(double**& a, unsigned l, unsigned c)
你也应该纠正这一点:
double x=(double)(rand()/RAND_MAX);
//x总是评估为零
进入这个:
double x=((double)rand())/RAND_MAX);
之所以会出现此问题,是因为当您将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);
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];
}
}
此函数按值接收指针,然后立即将其赋值,忽略传入的值。如果要修改指针,则需要通过引用(double**&
)或指针(double***
)传入。或者,您可以从函数中返回一个新的指针,因为它的值不取决于传入的内容
double** matrixMake(int unsigned l,int unsigned c)
{
double** a=new double*[l];
for(int i=0;i<l;i++)
{
a[i]=new double[c];
}
return a;
}
相关文章:
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 将链表转换为指针数组时出错
- 尝试将指针与结构一起使用时出错
- 将类指针类型转换为键时出错
- 如果我在指针中使用 ++ 操作数,我的值就会出错
- 在 Clang 中使用指向成员的指针时出错
- 编译包含指向模板函数的指针的初始值设定项列表时,gcc 出错,但 clang 不出错
- 通过在迭代指针键映射上出错来捕获非确定性
- 调用指向成员函数的指针时出错
- 通过具有矢量基址的指针读取矢量元素时出错
- 尝试返回指向 Visual Studio 中的动态数组的指针时出错C++
- 将空间分配给整数指针时出错
- GNU 链接器:如果头文件中的指针被声明为 NULL 和/或 extern,则出错
- 尝试将结构指针传递给类时出错
- 我设计了一个类并创建了基指针,但是当我尝试通过基指针访问派生函数时,它会出错
- 非标准语法;使用 '&' 创建指向成员的指针错误,将成员函数分配给向量时出错
- 在使用C (Microsoft vs)中使用指针和新运算符时出错
- 将数组指针传递到函数时出错
- C++将指针数组传递给函数指针数组时出错
- 删除时出错:表达式必须是指向完整对象类型的指针