
Greetings... What is wrong in assigning a smart/shared_ptr pointer in C++ code to a struct which may then be passed to a C code? Consider the sample source towards the end of this email. When I run this through valgrind (memory debugger, see http://www.valgrind.org), it points out potential problem (also listed after the sample code). It also seems to cause memory corruption. What may be a better way of saving/storing a smart/shared_ptr pointer in a C struct (and yet have the reference counter in the smart/shared_ptr pointer increment)? Best regards, -Arun. --------------------- The sample program -------------------- #include <boost/shared_ptr.hpp> class A { public: int val; }; typedef boost::shared_ptr<A> APtr; struct S { public: APtr aptr; }; struct S *func(void) { A *a = new A; a->val = 12; APtr aptr(a); struct S *s = (struct S *)malloc(sizeof(struct S)); s->aptr = aptr; return s; } int main(int ac, char *av[]) { struct S *s; s = func(); APtr aptr = s->aptr; } ------------------------------------------------------ Output from valgrind: Conditional jump or move depends on uninitialised value(s) at 0x8048A20: boost::detail::shared_count::operator= (boost::detail::shared_count const&) (shared_count.hpp:179) by 0x80487FD: boost::shared_ptr<A>::operator= (boost::shared_ptr<A> const&) (shared_ptr.hpp:148) by 0x80486E8: func() (c.cpp:22) by 0x8048742: main (c.cpp:30)