Got it. Thanks again!
Code:
#include <stdio.h>
#include <stdlib.h>
int ** fun1(void);
void fun2(int **) ;
void fun3(int **) ;
int main(void) {
int i, j, k = 0;
int ** twodarray ;
twodarray = fun1(); // allocate the memory
for (i = 0 ; i < 10 ; i++) { // assign values
for (j = 0 ; j < 10 ; j++ ) {
twodarray[i][j] = k ;
k++ ;
}
}
fun2(twodarray) ; // print out the values
fun3(twodarray) ; // free the memory
return 0;
}
int ** fun1(void) {
int i, **arr ;
arr = calloc( 10 , sizeof(int) ) ;
printf("Heap allocated... address=%p\n", arr) ;
for (i = 0 ; i < 10 ; i++) {
arr[i] = calloc(10, sizeof(int) ) ;
printf("Heap allocated... address=%p\n", arr[i]) ;
}
return arr ;
}
void fun2(int **arr) {
int i, j ;
for( i = 0 ; i < 10 ; i++ ) {
for ( j = 0 ; j < 10 ; j++ ) {
printf("%d:%d = %d\n", i, j, arr[i][j]);
}
}
}
void fun3(int ** arr) {
int i ;
for (i = 0 ; i < 10 ; i++) {
printf("Freeing Heap... address=%p\n", arr[i]) ;
free(arr[i]) ;
}
printf("Freeing Heap... address=%p\n", arr) ;
free(arr) ;
}