I have created the following program which takes user's input of an nxn array and prints it. My code has three functions namely for memory allocation for a 2D array, user data input and displaying stored data. While 1x1 to 4x4 matrix works fine, 5x5 and above matrix results in
Segmentation fault (core dumped)
Why is it so? What am I doing wrong ? The following is my code-
#include <stdio.h>
#include <stdlib.h>
int ** allocateMemory(int, int);
void createMatrix(int **, int, int);
void displayMatrix(int **, int, int);
int main()
{
int sizeA, sizeB;
printf("\nMatrix type(a x b): ");
scanf("%d %d", &sizeA, &sizeB);
printf("You entered: %d x %d\n", sizeA, sizeB);
int ** arrayA;
arrayA = allocateMemory(sizeA, sizeB);
printf("\nMATRIX A\n");
createMatrix(arrayA, sizeA, sizeB);
displayMatrix(arrayA, sizeA, sizeB);
getchar();
free(arrayA);
printf("\n");
return 0;
}
/*-----------------------------------------*/
/* FUNCTION TO ALLOCATE MEMORY TO AN ARRAY */
/*-----------------------------------------*/
int ** allocateMemory(int r, int c) //r - rows, c - columns
{
int ** ptr;
ptr = (int **) malloc(r*sizeof(int));
for(int i = 0; i < r; i++){
ptr[i] = (int *) malloc(c*sizeof(int));
}
return ptr;
}
/*-----------------------------*/
/* FUNCTION TO CREATE A MATRIX */
/*-----------------------------*/
void createMatrix(int ** array, int r, int c)
{
printf("\nEnter matrix values: \n");
for(int i = 0; i < r; i++){
for(int j = 0; j < c; j++){
scanf("%d", &array[i][j]);
}
}
printf("Array Created.");
printf("\n");
}
/*----------------------------*/
/* FUNCTION TO DISPLAY MATRIX */
/*----------------------------*/
void displayMatrix(int ** array, int r, int c)
{
printf("\n");
for(int i = 0; i < r; i++){
for(int j = 0; j < c; j++){
printf("%5d ", *(*(array + i) + j));
}
printf("\n");
}
}