#include "mymalloc.h" #include #include void **mymalloc(int size, int n1, int n2) { int i; void **p, *p1; p1 = (void *) malloc(n1 * n2 * size); if (p1 == NULL) return NULL; p = (void **) malloc(n1 * sizeof(void *)); if (p == NULL) return NULL; for (i = 0; i < n1; i++) p[i] = (void *) ((long) p1 + n2 * size * i); return p; } void myfree(void **p) { free(p[0]); free(p); } void ***mymalloc3D(int size, int n1, int n2, int n3) { int i, j; void ***p, *p1; p1 = (void *) malloc(n1 * n2 * n3 * size); if (p1 == NULL) return NULL; p = (void ***) malloc(n1 * sizeof(void **)); if (p == NULL) return NULL; for (i = 0; i < n1; i++) { p[i] = (void **) malloc(n2 * sizeof(void *)); if (p[i] == NULL) return NULL; for (j = 0; j < n2; j++) p[i][j] = (void *) ((long) p1 + n2 * n3 * size * i + n3 * size * j); } return p; } void ***mymalloc3D_with_p(void *p1, int size, int n1, int n2, int n3) { int i, j; void ***p; /* if (p1 == NULL) return nrerror("alloc_w_p: p1 NULL\n"); */ p = (void ***) malloc(n1 * sizeof(void **)); if (p == NULL) return NULL; for (i = 0; i < n1; i++) { p[i] = (void **) malloc(n2 * sizeof(void *)); if (p[i] == NULL) return NULL; for (j = 0; j < n2; j++) p[i][j] = (void *) ((long) p1 + n2 * n3 * size * i + n3 * size * j); } return p; } void myfree3D(void ***p, int n1, int n2, int n3) { int i; if (p == NULL) return; free(p[0][0]); for (i = 0; i < n1; i++) free(p[i]); free(p); }