[R] R_alloc with structures with "flexible array members"
Ramon Diaz-Uriarte
rdiaz02 at gmail.com
Wed Mar 5 11:25:06 CET 2008
Dear All,
In a package, I want to use some C code where I am using a structure
(as the basic element of a linked list) with flexible array members.
Basically, this is a structure where the last component is an
incomplete array type (e.g., Harbison & Steel, "C, a reference
manual, 5th ed.", p. 159) such as:
struct Sequence {
struct Sequence *next;
int len;
unsigned int state_count[];
};
To create one such sequence, I allocate storage (following Harbison
and Steel) in a C program as follows:
struct Sequence *A;
int n = 4;
A = malloc( sizeof(struct Sequence) + n * sizeof(unsigned int));
If I understand correctly, however, it would be better to use R_alloc
instead of malloc (memory automagically freed on exit and error;
error-checking). But I do not know how to make the call to R_alloc
here, since R_alloc allocates n units of size bytes each.
I've tried, without success, the following two:
int to_add_for_R_alloc =
(int) ceil((float) sizeof(struct sequence) / sizeof(unsigned int));
A = (struct sequence *) R_alloc(to_add_for_R_alloc + n,
sizeof(unsigned int));
or even a brute force attempt as:
A = (struct sequence *) R_alloc( 100, sizeof(struct sequence));
but both result in segmentation faults.
Should I just keep using malloc (and free at end)?
Thanks,
R.
--
Ramon Diaz-Uriarte
Statistical Computing Team
Structural Biology and Biocomputing Programme
Spanish National Cancer Centre (CNIO)
http://ligarto.org/rdiaz
More information about the R-help
mailing list