[ create a new paste ] login | about

Link: http://codepad.org/u6bibIzT    [ raw code | output | fork ]

C, pasted on Jul 11:
#include <stdio.h>
#include <stdlib.h>

#define L3 3
#define L512 512
#define M512 512
#define N3 3
#define N512 512

#define A 1
#define B 2
#define C 3
#define MAGIC1 'A'
#define MAGIC2 'Z'

int mallocarray(char ****b, int x, int y, int z) {
  int n, s;
  int i, j;
  n = 0;
  *b = malloc(s = sizeof(char *) * x);
  n += s;
  for (i = 0; i < x; i++) {
    (*b)[i] = malloc(s = sizeof(char *) * y);
    n += s;
    for (j = 0; j < y; j++) {
      (*b)[i][j] = malloc(z);
      n += z;
    }
  }  
  return n;
}

void freearray(char ****b, int x, int y) {
  int i, j;
  for (i = 0; i < x; i++) {
    for (j = 0; j < y; j++) {
      free((*b)[i][j]);
    }
    free((*b)[i]);
  }  
  free(*b);
}

void f1(char a[][M512][N512], int x, int y, int z) {
  printf("magic1: %c\n", a[x][y][z]);
  a[x][y][z] = MAGIC2;
}

void f2(char ***b, int x, int y, int z) {
  printf("magic1: %c\n", b[x][y][z]);
  b[x][y][z] = MAGIC2;
}

int main() {
  char a1[L3][M512][N512];
  char a2[L512][M512][N3];
  char ***b1;
  char ***b2;
  int n;

  printf("sizeof(char): %d, sizeof(char *): %d\n", sizeof(char), sizeof(char *));
  printf("A4: %d\n", sizeof(a1));
  printf("A5: %d\n", sizeof(a2));
  
  n = mallocarray(&b1, L3, M512, N512);
  printf("B4: %d\n", n);
  n = mallocarray(&b2, L512, M512, N3);
  printf("B4: %d\n", n);

  a1[A][B][C] = MAGIC1;
  f1(a1, A, B, C);
  printf("magic2: %c\n", a1[A][B][C]);
  
  b1[A][B][C] = MAGIC1;
  f2(b1, A, B, C);
  printf("magic2: %c\n", b1[A][B][C]);

  freearray(&b1, L3, M512);
  freearray(&b2, L512, M512);
  return 0;
}
/* end */


Output:
1
2
3
4
5
6
7
8
9
sizeof(char): 1, sizeof(char *): 4
A4: 786432
A5: 786432
B4: 792588
B4: 1837056
magic1: A
magic2: Z
magic1: A
magic2: Z


Create a new paste based on this one


Comments: