2011-04-01 93 views
1

我想知道是否有一种方法可以从用户获取二维数组的大小?例如对于一个矩阵的大小,我试图定义一个指针,并采取矩阵的大小后,使内存。 是这样的:`有没有什么办法可以从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]; 
     } 
    } 
} 

程序不给任何错误,但是当我运行它,它不工作。当我检查了这次脱衣舞时,我意识到它需要的内存不是用于垫子的。
这是我的想法,并没有找到任何方法使它成为work.do我们有任何方法可以从用户中获取一个二维数组的大小?

+0

我不是语法警察,我知道这里有很多英语是第二语言的人,但这里的拼写和语法错误让我对野生猴子倾斜。 – 2011-04-01 19:30:18

回答

1

除了使用cin和cout之外,您的代码读取为C,而不是C++。

在C++中没有数组大小的概念。你这样做的方式,你必须手动跟踪它,所以如果你打算用C++编写矩阵代码,我建议你把Matrix作为一个类来实现,你认真考虑使用预先打包的容器对于你的值(向量向量很好,但你也可以使用单个向量,单个valarray,来自boost的单个范围数组),而不是自己管理内存(除非这是练习的目标,然后我'd建议你使用新的和删除而不是malloc并释放)。

我建议你使用预封装容器的原因是因为今天你不必担心C++中的手动内存管理了(很多抱怨内存泄漏的人很容易在C++中创建没有意识到这一点)。这就是容器和智能指针的存在。

如果您想知道如何使用单个数组,单个valarray或矢量,请阅读valarray和切片。这将指出你在正确的方向。最后,如果你正在编写C++,请不要执行exit(1);如果你正在编写C++,请不要执行exit(1);如果你正在编写C++,请不要执行exit(1)。你应该抛出一个异常(顺便说一下,你将使用预先打包的容器或新的操作符)。

快乐学习。

0

mat是堆栈上的局部变量。您更好地利用返回值传递分配指针,但如果你想通过参数传递给它 - 你需要使用引用:

void makeMatrix(int **&mat,int,int); 

或 “无效makeMatrix(INT ***垫,INT,INT) ;”并通过& A(并在里面做*mat =)。

+2

它仍然是4月1日,但在C++中'***'?请! – 2011-04-01 19:37:10

+0

@Bo - 尽可能地丑陋和不推荐,它仍然是一个有效的代码。这个人显然正在学习指针,引用和所有这些东西。如果你有其他建议 - 添加一个答案,不要光顾。 – littleadv 2011-04-01 19:51:30

+0

@Bo:三指针示例:http://stackoverflow.com/questions/540822/allocating-memory-for-triple-pointer – 2011-04-01 19:52:55

1

你有没有考虑过使用矢量矢量,并通过参考传递?

std::vector<std::vector<int> > mat(rows, std::vector(cols, 0));应该将矩阵初始化为全零。

0

我刚刚找到了一种内存分配的方式。 只需要,使一个类型,然后解决它的变量在function.like这样的:

typedef int mymatrix; 
void makeMatrix(mymatrix &mat,int,int); 

,并在主要需要定义一个指针,并把函数指针:

int **A; 
makeMatrix(A,row,column); 

所以它的可能会从用户中获取二维数组的大小。

相关问题