Thanks for your suggestion, Dries! It works if I use &p.elem[0] as the initial address (not &p->elem), and only if I make elem public.I guess that's a price to pay (well, I can always fetch the address with a getter). Do you know what happens to the memory layout in the presence of virtual functions if I have multiple components? For example: double a,b; instead of: double elem[2]; Is it safe to assume that &p.a would give the initial address of a contiguous structure? Or should I play safe and use MPI_Pack and MPI_Unpack, for example? Helvio On 12/12/2012 07:37 PM, Dries Kimpe wrote:
Classes/structs that have virtual functions have a different memory layout than structures/classes without them.
In your code below, you're assuming that the class Pair has a memory layout of 2 doubles. This happens to be the case when there are no virtual functions in the class.
However, if you add a virtual function, the memory layout changes. The class now also contains information about its runtime type (i.e. Pair).
You can fix this by using &p->elem[0] as the address of the data you want to send/receive.
Dries