'Got stuck in a customizable dimensional matrix operation program

`
//MATRIX INPUT
#include<stdio.h>

int main(void)
{
  //declaring variables
  size_t row=0;
  size_t column=0;
  int limit=0;
  int en=0;
  int mat[row][column];

  //starting
  printf("ENTRE THE NUMBER OF R 
  EPETITIONS OF MATRIX 
   INPUT:");
  scanf("%d",&limit);
  //starting loop
  for(int i=0;i<=(limit-1);++i)
  {
      printf("\nINITIALIZED THE 
MATRIX-%d...\n",i+1);
      printf("\nENTER ROW 
NUMBER FOR MATRIX:\n");
      scanf("%d",&row);
      printf("\nENTER COLUMN 
NUMBER FOR MATRIX:\n");
      scanf("%d",&column);

      //entering the entries..
      for(int j=0; j<row ;++j)
      {
          for(int k=0; 
k<column;++k)
          {
              printf("ENTRY (%d,%d):",(j+1),(k+1));
              scanf("%d",&mat[k][j]);
          }


      }

  }
  //starting the console output 
 of matrix
  int v=0;
  printf("Which matrix do you 
want to see?\n");
  scanf("%d",&v);
  for(v=0; v<=limit; ++v)
  {

  for(int l=0; l<row; ++l)
  {
      for( int m=0; m<column; 
++m)
      {
        printf("%2d", mat[m][l]);

      }
  }
  }
  return 0;

}`

I have written a program in C where the user can firstly define the number of matrices. Then, the dimension of individual matrix is defined. I have successfully proceeded to individual matrix input. But I am stuck in writing the operational codes like multiplying and adding matrices as well as to write code for showing output in matrix style. How to fix this?

incomplete source code Console of output

c


Solution 1:[1]

I couldn't get the part why you created an empty static array, and then changed its boundaries at least tried to change. However, I believe dynamic array allocation would serve your purpose better than static one. I implemented a 3D array that has the first index as matrices, the second index as rows of the current matrix, and the third index as columns of the current matrix. Also, fixed the display method, you have been using. However, there can be different-sized matrices for each matrix you have. Therefore, I implemented another list to keep track of the rows and columns. Lastly, I put two links at the top of the code that you can implement addition and multiplication operations by yourself. You can see the code from here:

//MATRIX INPUT
#include<stdio.h>
#include<stdlib.h>

//Add two matrices
//https://www.programmingsimplified.com/c-program-add-matrices


//Multiplying two matrices
//https://www.programiz.com/c-programming/examples/matrix-multiplication


void display_matrix(int** , int , int );
void fillWithNum(int**,int,int,int);

int main(void)
{
    //declaring variables
    size_t row=0;
    size_t column=0;
    int limit=0;
    int en=0;
    int ***mat;

    //starting
    printf("ENTRE THE NUMBER OF REPETITIONS OF MATRIX INPUT:");
    scanf("%d",&limit);

    mat = (int***)malloc(sizeof(int**) * limit);

    //Two keep track of the rows and columns
    //First index of the second dimension will be rows, and
    //second index will be columns of matrices at the mat variable.
    int **indexingList;

    indexingList = (int**)malloc(sizeof(int*) * limit);

    for(int i=0;i<limit;++i) {
        indexingList = (int*) malloc(sizeof(int) * 2);
    }

    //starting loop
    for(int i=0;i<limit;i++)
    {
        printf("\nINITIALIZED THE MATRIX-%d...\n",i+1);
        printf("\nENTER ROW NUMBER FOR MATRIX:\n");
        scanf("%d",&row);
        printf("\nENTER COLUMN NUMBER FOR MATRIX:\n");
        scanf("%d",&column);

        mat[i] = (int**) malloc(row * sizeof(int*));

        for (int j = 0;j < row;j++) {
            mat[i][j] = (int*)malloc(column * sizeof(int));
        }


        //entering the entries..
        for(int j=0;j < row;j++)
        {
            for(int k=0;k < column;k++)
            {
              printf("ENTRY (%d,%d):",(j+1),(k+1));
              scanf("%d",&mat[i][j][k]);
            }
        }


        indexingList[i][0] = row;
        indexingList[i][1] = column;
    }

    //starting the console output of matrix
    int v=1;
    printf("Which matrix do you want to see?\n");
    scanf("%d",&v);
    //v-1 because if user want to display first matrix it should be 0, so user will enter 1
    //therefore, 1-1 will give us 0 to display 0 index matrix
    display_matrix(mat[v-1], indexingList[v-1][0], indexingList[v-1][1]);


    //Problem at freeing memory for some purpose crash at here.
    //I couldn't figure it out as well.

    for(int i = 0;i < limit;i++) {
        for(int j = 0;j < indexingList[i][0];j++) {
            free(mat[i][j]);
        }
        free(mat[i]);
    }
    free(mat);

    for(int i = 0;i < limit;i++) {
        free(indexingList[i]);
    }
    free(indexingList);

    return 0;
}

void display_matrix(int** matrix, int r, int c) {
    for(int i = 0 ;i < r;i++){
        for(int j = 0;j < c;j++) {
            printf("%d\t",matrix[i][j]);
        }
        printf("\n");
    }
}


//Test purpose
void fillWithNum(int** arr,int r, int c, int num) {
    for (int i = 0;i<r;i++) {
        for(int j = 0;j<c;j++) {
            arr[i][j] = num;
        }
    }

}

However, this code also crashes at the end of the memory-freeing part. I couldn't figure out why, but if someone finds it out as well, I would appreciate it.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 BGForDevelopers