连接2个矩阵

我有一个动态分配的矩阵,我想创建另一个,这是第一个矩阵,但旁边有另一个副本。 例如,我有矩阵:

 11
 22

我的新矩阵将是:

 1 1 1 1
 2 2 2 2

我该如何连接它们? 这是我在C中的代码:

#include #include #include int **create_matrix(int row, int col) { int **matrix = malloc(sizeof (int*)*row); int i; for (i = 0; i < row; i++) { matrix[i] = malloc(sizeof (int)*col); } return matrix; } void matrix_input(int **matrix, int row, int col) { int i, j; printf("enter the elements of the matrix:\n"); for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { scanf("%d", &matrix[i][j]); } } } int **extend_matrix(int **matrix, int row, int col) { int k, j; int i; int **extend_matrix = malloc(sizeof (int*)*row); for (k = 0; k < row + row; k++) { extend_matrix[k] = malloc(sizeof (int)*col); } extend_matrix = matrix; extend_matrix = (int**) realloc(extend_matrix, (row + row) * sizeof (int*)); extend_matrix[j] = matrix[j]; for (i = 0; i < row; i++) { extend_matrix[k] = matrix[i]; } } void print_matrix(int **matrix, int row, int col) { int i, j; for (i = 0; i < row; i++) { for (j = 0; j < col; j++) { printf(" %d ", matrix[i][j]); } printf("\n"); } } void print_extend_matrix(int **extend_matrix, int row, int col) { int k, j; for (k = 0; k < row + row; k++) { for (j = 0; j < col; j++) { printf("%d", extend_matrix[k][j]); } printf("\n"); } } int main(void) { int **matrix; int **extend_matrix; int row, col; printf("enter the number of rows of cols:"); scanf("%i%i", &row, &col); matrix = create_matrix(row, col); matrix_input(matrix, row, col); print_matrix(matrix, row, col); print_extend_matrix(extend_matrix, row, col); getch(); return 0; } 

虽然@NPE向您建议了一个更好的方法。 如果要在extend_matrix()中分配内存

代码中的错误( 阅读评论

 int **extend_matrix = malloc(sizeof (int*)*row); ^ on row for (k = 0; k < row + row; k++) ^ where as loop is for row + row { extend_matrix[k] = malloc(sizeof (int)*col); // So this cause an error, // segment-fault } 

第二,你的概念复制记忆是错误的:

  extend_matrix = matrix; 

在这一行,你正在为extend_matrix指定matrix错误。 你需要循环来将每个元素从matrix[][]复制到extend_matrix[][] 。 ( 但首先纠正你的内存分配代码

我认为extend_matrix()应该只调用extend_matrix()来创建一个宽度加倍的新矩阵,然后使用两个简单的嵌套循环来填充它。

如果这是您正在寻找的:

 int concat(void * oldM, int row, int col,void& *newM) { newM = malloc(sizeof(int)*row*col*2); for(int i = 0;i<2;++i) for(int j=0;j<2;++j) newM[i][j+col] = newM[i][j] = oldM[i][j]; for(int i = 0;i<2;++i) { for(int j=0;j<4;++j) { cout<<"\t"<