Chris@82: Chris@82: Chris@82: Chris@82: Chris@82:
Chris@82:Chris@82: Previous: Dynamic Arrays in C, Up: Multi-dimensional Array Format [Contents][Index]
Chris@82:A different method for allocating multi-dimensional arrays in C is Chris@82: often suggested that is incompatible with FFTW: using it will Chris@82: cause FFTW to die a painful death. We discuss the technique here, Chris@82: however, because it is so commonly known and used. This method is to Chris@82: create arrays of pointers of arrays of pointers of …etcetera. Chris@82: For example, the analogue in this method to the example above is: Chris@82:
Chris@82:int i,j;
Chris@82: fftw_complex ***a_bad_array; /* another way to make a 5x12x27 array */
Chris@82:
Chris@82: a_bad_array = (fftw_complex ***) malloc(5 * sizeof(fftw_complex **));
Chris@82: for (i = 0; i < 5; ++i) {
Chris@82: a_bad_array[i] =
Chris@82: (fftw_complex **) malloc(12 * sizeof(fftw_complex *));
Chris@82: for (j = 0; j < 12; ++j)
Chris@82: a_bad_array[i][j] =
Chris@82: (fftw_complex *) malloc(27 * sizeof(fftw_complex));
Chris@82: }
Chris@82:
As you can see, this sort of array is inconvenient to allocate (and
Chris@82: deallocate). On the other hand, it has the advantage that the
Chris@82: (i,j,k)-th element can be referenced simply by
Chris@82: a_bad_array[i][j][k]
.
Chris@82:
If you like this technique and want to maximize convenience in accessing
Chris@82: the array, but still want to pass the array to FFTW, you can use a
Chris@82: hybrid method. Allocate the array as one contiguous block, but also
Chris@82: declare an array of arrays of pointers that point to appropriate places
Chris@82: in the block. That sort of trick is beyond the scope of this
Chris@82: documentation; for more information on multi-dimensional arrays in C,
Chris@82: see the comp.lang.c
Chris@82: FAQ.
Chris@82: