Hi Quincey,
Quincey Koziol wrote:
I am using compound data types with vlen strings and integers. The struct
containing the strings and integers also contains a couple of methods, which
prevents me from using the HOFFSET macro, so I used sizeof() and/or the
getSize() method from the H5 data types to determine the offset of the
components. This works under my personal 32-bit system, but ends with a
segmentation fault under a 64-bit system.
I found out that the offset determined by HOFFSET is different from the
sizeof() and getSize() methods. I avoided this problem by inserting the int as
the last element.
Is this a general problem/issue or due wrong usage?
You should use HOFFSET for inserting your fields into the compound
datatype. The compiler may insert padding before/after fields in the struct
and that information is not reflected in the value returned from getSize().
I would like to use HOFFSET, but since my structs have several methods
my compiler gives:
x.cpp:301: warning: invalid access to non-static data member ‘main1(int,
char**)::Test::id’ of NULL object
x.cpp:301: warning: (perhaps the ‘offsetof’ macro was used incorrectly)
because they are non-PODs.
I just found a solution for it. Is this a proper way to do it?
struct AData {//contains only variables
//variables
int acc;
char* id;
};
struct A : AData { //contains only functions
//some functions
}
Using the HOFFSET(AData, id) macro compiles now without warnings and can
be used in the insertMember function of CompType.
FYI:
My compound data structure is quite complex and consists of several
nested VLEN data types, including strings and other VLEN-data as well as
atomic types. I need those functions to convert data structures from
other API's to H5 compound data types, but also for memory management.
~Mathias
_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://mail.hdfgroup.org/mailman/listinfo/hdf-forum_hdfgroup.org