The malloc and free of arrays, in various ways.
Code:
#include <stdio.h>
#include <stdlib.h>
void f1(void) {
int a[10];
int *b = malloc(10*sizeof(*b));
///
free(b);
}
// If the minor dimension is always fixed
void f2(void) {
int a[10][20];
int (*b)[20] = malloc(10*sizeof(*b));
///
free(b);
}
// variable in both dimensions
void f3(void) {
int a[10][20];
int **b = malloc(10*sizeof(*b));
for( int i = 0 ; i < 10 ; i++ )
b[i] = malloc(20*sizeof(*b[i]));
///
for ( int i = 0 ; i < 10 ; i++ )
free(b[i]);
free(b);
}
// variable in both dimensions, but all rows the same
void f4(void) {
int a[10][20];
int **b = malloc(10*sizeof(*b));
b[0] = malloc(10*20*sizeof(*b[0]));
for( int i = 1 ; i < 10 ; i++ )
b[i] = b[i-1] + 20;
///
free(b[0]);
free(b);
}
int main ( ) {
f1();
f2();
f3();
f4();
}