How to dynamically allocate multidimensional array in C

1 Answer

0 votes
#include <stdio.h>
#include <stdlib.h>

#define ROWS 4
#define COLS 5

void setData(int **array) {
	for (int i = 0; i < ROWS; i++) {
		for (int j = 0; j < COLS; j++) {
			array[i][j] = (i + 1) * (j + 1);
		}
	}
}

void print(int **array) {
	for (int i = 0; i < ROWS; i++) {
		for (int j = 0; j < COLS; j++) {
			printf("%3d", array[i][j]);
		}
		printf("\n");
	}
}

void freeArrays(int **array) {
	for (int i = 0; i < ROWS; i++) {
		free(array[i]);
	}
	free(array);
}

void allocateArrays(int **array) {
	for (int i = 0; i < ROWS; i++) {
		array[i] = malloc(COLS * sizeof(int));
		if (array[i] == NULL) {
			printf("out of memory\n");
			exit(1);
		}
	}
}

int main(void) {
    int **array = NULL;
    
	array = malloc(ROWS * sizeof(int *));
	if (array == NULL) {
		printf("out of memory\n");
		exit(1);
	}
    
	allocateArrays(array);
	setData(array);
	print(array);
	freeArrays(array);
    
}



/*
run:

  1  2  3  4  5
  2  4  6  8 10
  3  6  9 12 15
  4  8 12 16 20
  
*/
   

 



answered Apr 29, 2020 by avibootz

Related questions

2 answers 219 views
2 answers 189 views
1 answer 148 views
148 views asked Dec 28, 2020 by avibootz
1 answer 226 views
...