1

動的に割り当てられたマトリックスがあり、最初のマトリックスであるが、横に別のコピーがある別のマトリックスを作成したいと思います。たとえば、私はマトリックスを持っています:

11
22

私の新しいマトリックスは次のようになります。

1 1 1 1
2 2 2 2

どうすればそれらを連結できますか?これはCでの私のコードです:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

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;
} 
4

3 に答える 3

2

@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;  

この行であなたはその間違ったものに割り当てmatrixて います。各要素をからにextend_matrixコピーするには、ここでループする必要があります。(ただし、最初にメモリ割り当てコードを修正してくださいmatrix[][]extend_matrix[][]

于 2013-03-04T08:50:11.300 に答える
2

extend_matrix()2倍の幅の新しいマトリックスを作成するために呼び出しcreate_matrix()、次に2つの単純なネストされたループを使用してそれを設定する必要があると思います。

于 2013-03-04T08:15:39.500 に答える
1

これがあなたが探しているものなら:

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"<<newM[i][j];
      }
      cout<<"\n";
   }
}
于 2013-03-04T08:49:20.740 に答える