📄 par_ealloc.c
字号:
/* Copyright (c) Colorado School of Mines, 2003.*//* All rights reserved. */#include "cwp.h"/*********************** self documentation **********************//*****************************************************************************EALLOC - Allocate and free multi-dimensional arrays with error reports.ealloc1 allocate a 1d arrayerealloc1 reallocate a 1d arrayealloc2 allocate a 2d arrayealloc3 allocate a 3d arrayealloc4 allocate a 4d arrayealloc5 allocate a 5d arrayealloc6 allocate a 6d arrayealloc1int allocate a 1d array of intserealloc1int reallocate a 1d array of intsealloc2int allocate a 2d array of intsealloc3int allocate a 3d array of intsealloc4int allocate a 4d array of intsealloc5int allocate a 5d array of intsealloc1float allocate a 1d array of floatserealloc1float reallocate a 1d array of floatsealloc2float allocate a 2d array of floatsealloc3float allocate a 3d array of floatsealloc4float allocate a 4d array of floatsealloc5float allocate a 5d array of floatsealloc6float allocate a 6d array of floatsealloc5ushort allocate a 5d array of unsigned shortsealloc5uchar allocate a 5d array of unsigned charsealloc6ushort allocate a 6d array of unsigned shortsealloc6uchar allocate a 6d array of unsigned charsealloc1double allocate a 1d array of doubleserealloc1double reallocate a 1d array of doublesealloc2double allocate a 2d array of doublesealloc3double allocate a 3d array of doublesealloc1complex allocate a 1d array of fcomplex values erealloc1complex reallocate a 1d array of fcomplex valuesealloc2complex allocate a 2d array of fcomplex valuesealloc3complex allocate a 3d array of fcomplex values*****************************************************************************Function Prototypes:void *ealloc1 (size_t n1, size_t size);void *erealloc1 (void *v, size_t n1, size_t size);void **ealloc2 (size_t n1, size_t n2, size_t size);void ***ealloc3 (size_t n1, size_t n2, size_t n3, size_t size);void ****ealloc4 (size_t n1, size_t n2, size_t n3, size_t n4, size_t size);void *****ealloc5 (size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t size);void ******ealloc6 (size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t n6, size_t size);int *ealloc1int(size_t n1);int *erealloc1int(int *v, size_t n1);int **ealloc2int(size_t n1, size_t n2);int ***ealloc3int(size_t n1, size_t n2, size_t n3);int ****ealloc4int(size_t n1, size_t n2, size_t n3, size_t n4);int *****ealloc5int(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5);float *ealloc1float(size_t n1);float *erealloc1float(float *v, size_t n1);float **ealloc2float(size_t n1, size_t n2);float ***ealloc3float(size_t n1, size_t n2, size_t n3);float ****ealloc4float(size_t n1, size_t n2, size_t n3, size_t n4);float *****ealloc5float(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5);float ******ealloc6float(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t n6);unsigned short *****ealloc5ushort(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5);unsigned char *****ealloc5uchar(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5);unsigned short ******ealloc6ushort(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t n6);unsigned char ******ealloc6uchar(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t n6);double *ealloc1double(size_t n1);double *erealloc1double(double *v, size_t n1);double **ealloc2double(size_t n1, size_t n2);double ***ealloc3double(size_t n1, size_t n2, size_t n3);fcomplex *ealloc1complex(size_t n1);fcomplex *erealloc1complex(fcomplex *v, size_t n1);fcomplex **ealloc2complex(size_t n1, size_t n2);fcomplex ***ealloc3complex(size_t n1, size_t n2, size_t n3);*****************************************************************************Notes:These routines simply call those in ../../cwp/lib/alloc.c and issuean error message via the printf routine if the underlying malloccame up empty. See alloc.c for notes on the routines.The routines in ../../cwp/lib/alloc.c were written by Dave Hale(Zhaobo Meng added 4d (except alloc4), 5d and 6d functions).*****************************************************************************Author: Jack Cohen, Center for Wave PhenomenaZhaobo Meng added 4d (except ealloc4), 5d and 6d functions*****************************************************************************//**************** end self doc ********************************/#include "par.h"#define ERROR NULL/* allocate a 1-d array */void *ealloc1 (size_t n1, size_t size){ void *p; if (ERROR == (p=alloc1(n1, size))) printf("%s: malloc failed", __FILE__); return p;}/* re-allocate a 1-d array */void *erealloc1 (void *v, size_t n1, size_t size){ void *p; if (ERROR == (p=realloc1(v, n1, size))) printf("%s: realloc failed", __FILE__); return p;}/* allocate a 2-d array */void **ealloc2 (size_t n1, size_t n2, size_t size){ void **p; if (ERROR == (p=alloc2(n1, n2, size))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 3-d array */void ***ealloc3 (size_t n1, size_t n2, size_t n3, size_t size){ void ***p; if (ERROR == (p=alloc3(n1, n2, n3, size))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 4-d array */void ****ealloc4 (size_t n1, size_t n2, size_t n3, size_t n4, size_t size){ void ****p; if (ERROR == (p=alloc4(n1, n2, n3, n4, size))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 5-d array */void *****ealloc5 (size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t size){ void *****p; if (ERROR == (p=alloc5(n1, n2, n3, n4, n5, size))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 6-d array */void ******ealloc6 (size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t n6, size_t size){ void ******p; if (ERROR == (p=alloc6(n1, n2, n3, n4, n5, n6, size))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 1-d array of ints */int *ealloc1int(size_t n1){ int *p; if (ERROR == (p=alloc1int(n1))) printf("%s: malloc failed", __FILE__); return p;}/* re-allocate a 1-d array of ints */int *erealloc1int(int *v, size_t n1){ int *p; if (ERROR == (p=realloc1int(v,n1))) printf("%s: realloc failed", __FILE__); return p;}/* allocate a 2-d array of ints */int **ealloc2int(size_t n1, size_t n2){ int **p; if (ERROR == (p=alloc2int(n1, n2))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 3-d array of ints */int ***ealloc3int(size_t n1, size_t n2, size_t n3){ int ***p; if (ERROR == (p=alloc3int(n1, n2, n3))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 4-d array of ints */int ****ealloc4int(size_t n1, size_t n2, size_t n3, size_t n4){ int ****p; if (ERROR == (p=alloc4int(n1, n2, n3,n4))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 5-d array of ints */int *****ealloc5int(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5){ int *****p; if (ERROR == (p=alloc5int(n1, n2, n3, n4, n5))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 1-d array of floats */float *ealloc1float(size_t n1){ float *p; if (ERROR == (p=alloc1float(n1))) printf("%s: malloc failed", __FILE__); return p;}/* re-allocate a 1-d array of floats */float *erealloc1float(float *v, size_t n1){ float *p; if (ERROR == (p=realloc1float(v, n1))) printf("%s: realloc failed", __FILE__); return p;}/* allocate a 2-d array of floats */float **ealloc2float(size_t n1, size_t n2){ float **p; if (ERROR == (p=alloc2float(n1, n2))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 3-d array of floats */float ***ealloc3float(size_t n1, size_t n2, size_t n3){ float ***p; if (ERROR == (p=alloc3float(n1, n2, n3))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 4-d array of floats */float ****ealloc4float(size_t n1, size_t n2, size_t n3, size_t n4){ float ****p; if (ERROR == (p=alloc4float(n1, n2, n3, n4))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 5-d array of floats */float *****ealloc5float(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5){ float *****p; if (ERROR == (p=alloc5float(n1, n2, n3, n4, n5))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 6-d array of floats */float ******ealloc6float(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t n6){ float ******p; if (ERROR == (p=alloc6float(n1, n2, n3, n4, n5, n6))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 5-d array of unsigned shorts */unsigned short *****ealloc5ushort(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5){ unsigned short *****p; if (ERROR == (p=alloc5ushort(n1, n2, n3, n4, n5))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 6-d array of unsigned shorts */unsigned short ******ealloc6ushort(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5, size_t n6){ unsigned short ******p; if (ERROR == (p=alloc6ushort(n1, n2, n3, n4, n5, n6))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 5-d array of unsigned chars */unsigned char *****ealloc5uchar(size_t n1, size_t n2, size_t n3, size_t n4, size_t n5){ unsigned char *****p; if (ERROR == (p=alloc5uchar(n1, n2, n3, n4, n5))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 1-d array of doubles */double *ealloc1double(size_t n1){ double *p; if (ERROR == (p=alloc1double(n1))) printf("%s: malloc failed", __FILE__); return p;}/* re-allocate a 1-d array of doubles */double *erealloc1double(double *v, size_t n1){ double *p; if (ERROR == (p=realloc1double(v, n1))) printf("%s: realloc failed", __FILE__); return p;}/* allocate a 2-d array of doubles */double **ealloc2double(size_t n1, size_t n2){ double **p; if (ERROR == (p=alloc2double(n1, n2))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 3-d array of doubles */double ***ealloc3double(size_t n1, size_t n2, size_t n3){ double ***p; if (ERROR == (p=alloc3double(n1, n2, n3))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 1-d array of complexs */fcomplex *ealloc1complex(size_t n1){ fcomplex *p; if (ERROR == (p=alloc1complex(n1))) printf("%s: malloc failed", __FILE__); return p;}/* re-allocate a 1-d array of complexs */fcomplex *erealloc1complex(fcomplex *v, size_t n1){ fcomplex *p; if (ERROR == (p=realloc1complex(v, n1))) printf("%s: realloc failed", __FILE__); return p;}/* allocate a 2-d array of complexs */fcomplex **ealloc2complex(size_t n1, size_t n2){ fcomplex **p; if (ERROR == (p=alloc2complex(n1, n2))) printf("%s: malloc failed", __FILE__); return p;}/* allocate a 3-d array of complexs */fcomplex ***ealloc3complex(size_t n1, size_t n2, size_t n3){ fcomplex ***p; if (ERROR == (p=alloc3complex(n1, n2, n3))) printf("%s: malloc failed", __FILE__); return p;}#ifdef TESTmain(){ short *hv, **hm; int *iv, **im; float *fv, **fm; double *dv, **dm; size_t i1, i2; size_t n1, n2; scanf("%d %*[^\n]", &n1); scanf("%d %*[^\n]", &n2); /* Exercise 1-d routines */ hv = (short *) ealloc1(n1, sizeof(short)); iv = ealloc1int(n1); fv = ealloc1float(n1); dv = ealloc1double(n1); for (i1 = 0; i1 < n1; ++i1) { hv[i1] = i1; iv[i1] = i1; fv[i1] = (float) i1; dv[i1] = (double) i1; } printf("short vector:\n"); for (i1 = 0; i1 < n1; ++i1) { printf("hv[%d] = %hd\n", i1, hv[i1]); } putchar('\n'); printf("int vector:\n"); for (i1 = 0; i1 < n1; ++i1) { printf("iv[%d] = %d\n", i1, iv[i1]); } putchar('\n'); printf("float vector:\n"); for (i1 = 0; i1 < n1; ++i1) { printf("fv[%d] = %f\n", i1, fv[i1]); } putchar('\n'); printf("double vector:\n"); for (i1 = 0; i1 < n1; ++i1) { printf("dv[%d] = %lf\n", i1, dv[i1]); } putchar('\n'); free1(hv); free1int(iv); free1float(fv); free1double(dv); /* Exercise 2-d routines */ hm = (short **) ealloc2(n1, n2, sizeof(short)); im = ealloc2int(n1, n2); fm = ealloc2float(n1, n2); dm = ealloc2double(n1, n2); for (i2 = 0; i2 < n2; ++i2) { for (i1 = 0; i1 < n1; ++i1) { hm[i2][i1] = i1 + 2*i2; im[i2][i1] = i1 + 2*i2; fm[i2][i1] = (float) (i1 + 2*i2); dm[i2][i1] = (double) (i1 + 2*i2); } } printf("short matrix:\n"); for (i2 = 0; i2 < n2; ++i2) { for (i1 = 0; i1 < n1; ++i1) { printf("hm[%d, %d] = %hd ", i2, i1, hm[i2][i1]); } putchar('\n'); } putchar('\n'); printf("int matrix:\n"); for (i2 = 0; i2 < n2; ++i2) { for (i1 = 0; i1 < n1; ++i1) { printf("im[%d, %d] = %d ", i2, i1, im[i2][i1]); } putchar('\n'); } putchar('\n'); printf("float matrix:\n"); for (i2 = 0; i2 < n2; ++i2) { for (i1 = 0; i1 < n1; ++i1) { printf("fm[%d, %d] = %f ", i2, i1, fm[i2][i1]); } putchar('\n'); } putchar('\n'); printf("double matrix:\n"); for (i2 = 0; i2 < n2; ++i2) { for (i1 = 0; i1 < n1; ++i1) { printf("dm[%d, %d] = %lf ", i2, i1, dm[i2][i1]); } putchar('\n'); } putchar('\n'); free2((void*)hm); free2int(im); free2float(fm); free2double(dm); return EXIT_SUCCESS;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -