有没有办法在c ++中从用户获取数组大小?

时间:2011-04-01 19:24:38

标签: c++

我想知道是否有办法从用户那里获取一个维度数组的大小? 例如,对于矩阵的大小,我试图定义一个指针,并在获取矩阵的大小后制作内存。 这是:`

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.
这是我的想法,并且无论如何都没有找到使它工作。我们有什么方法可以从用户那里获取一个像素阵列的大小?

4 个答案:

答案 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数组的大小。