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
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)