我想知道是否有办法从用户那里获取一个维度数组的大小? 例如,对于矩阵的大小,我试图定义一个指针,并在获取矩阵的大小后制作内存。 这是:`
void getMatrixSize(&int,&int);
void makeMatrix(int **mat,int,int);
void getMatrixData(int **mat,int,int);
int matrixRow,matrixColumn;
int **A=NULL;
int main()
{
int row,column;
getMatrixSize(row,column);
makeMatrix(A,row,column);
getMatrixData(A,row,column);
}
getMatrixSize(int &row,int &column)
{
cout<<"Enter matrix row:";
cin>>matrixRow;
row=matrixRow;
cout<<"Enter matrix column:";
cin>>matrixColumn;
column=matrixColumn;
}
makeMatrix(int**mat,int row,int column)
{
int i=0;
mat=(int**)malloc(sizeof(int)*row);
if(mat==NULL)
{
cout<<"Error in getting memory";
exit(1);
}
for(i=0;i<row;i++)
{
mat[i]=(int*)malloc(sizeof(int))*column);
if(mat[i]==NULL)
{
cout<<"Error in getting memory";
exit(1);
}
}
}
void makeMatrixData(int**mat,int row,int column)
{
int i,j;
for(i=0;row>i;i++)
{
for(j=0;column>j;j++)
{
printf("m[%d][%d]=",i+1,j+1)
cin>>mat[i][j];
}
}
}
程序不会出现任何错误,但是当我运行它时,它不起作用。当我检查debuge时,我意识到它需要记忆垫而不是A.
这是我的想法,并且无论如何都没有找到使它工作。我们有什么方法可以从用户那里获取一个像素阵列的大小?
答案 0 :(得分:1)
您是否考虑过使用矢量矢量并通过引用传递它?
std::vector<std::vector<int> > mat(rows, std::vector(cols, 0));
应该将矩阵初始化为全零。
答案 1 :(得分:1)
除了使用cin和cout之外,您的代码读起来就像C,而不是C ++。
C ++中没有数组大小的概念。你正在做的方式,你必须手动跟踪它,所以如果你打算用C ++编写矩阵代码,我建议你把Matrix作为一个类实现,你认真考虑使用预先打包的容器对于你的值(矢量矢量很好,但你也可以使用单个矢量,单个valarray,来自boost的单个范围数组)而不是自己管理内存(除非这是练习的目标,然后我建议你使用new和delete而不是malloc和release。。
我建议您使用预先打包的容器的原因是因为今天您不必再担心C ++中的手动内存管理了(很多抱怨内存泄漏的人太容易在C ++中创建)我意识到这一点。这就是容器和智能指针的存在。
如果您想知道如何使用单个数组,单个valarray或矢量,请阅读valarray和切片。这将指出你正确的方向。
最后,如果您正在编写C ++,请不要退出(1);你应该抛出一个异常(顺便说一下,这是你通过使用预先打包的容器或新操作符得到的)。
快乐学习。
答案 2 :(得分:0)
mat
是堆栈上的局部变量。您最好使用返回值来传递已分配的指针,但如果您想通过参数传递它 - 您需要使用引用:
void makeMatrix(int **&mat,int,int);
或
'void makeMatrix(int *** mat,int,int);'并传递&amp; A(并在里面做*mat =
。)
答案 3 :(得分:0)
我刚刚找到了一种内存分配方式。 只需要创建一个类型,然后在函数中解决它的变量。就像这样:
typedef int mymatrix;
void makeMatrix(mymatrix &mat,int,int);
主要需要定义指针并将指针放在函数中:
int **A;
makeMatrix(A,row,column);
因此可以从用户那里获取dimetional数组的大小。