shit, you hit the nail on the head. they were allocated from a Julia 
buffer, which was probabily GC'ed.

Thanks!!1


On Thursday, February 11, 2016 at 1:14:52 PM UTC-8, Yichao Yu wrote:
>
> On Thu, Feb 11, 2016 at 1:59 PM, Gabriel Goh <[email protected] 
> <javascript:>> wrote: 
> > Let's say I have a program which returns 
> > 
> > data = ccall(getcfunction()) 
> > 
> > data is a pointer to a C-struct, 
> > 
> > dataload = unsafe_load(data) 
> > 
> > which in turn contains a field a which is a 2D array, a pointer to some 
> > pointers of size 4, say. 
> > 
> > julia> pointer_to_array(dataload.a,4) 
> > Ptr{Node} @0x3b8f66c0 
> > Ptr{Node} @0x3b8f66f0 
> > Ptr{Node} @0x3b8f6750 
> > Ptr{Node} @0x3b8f6810 
> > 
> > Each pointer has an array of size 2. So this is a 4x2 2 dimensional 
> array 
> > 
> > julia> [pointer_to_array(L,2) for L in pointer_to_array(dataload.a,4)] 
> > [Node(1,9.424044618506457),Node(2,11.88905969931336)] 
> > [Node(1,9.678805056283334),Node(2,9.845676112951852)] 
> > [Node(1,8.210282978159183),Node(2,11.911456933936952)] 
> > [Node(1,11.916394646460297),Node(2,10.57806221488004)] 
> > 
> > My problem is that the data the second pointers are pointing to seems to 
> be 
> > invisible to the garbage collector, and gets corrupted once in a while. 
> > 
> > Turning off garbage collection seems to fix the problem, and forcing 
> more 
> > garbage collections increase the severity of it. 
> > 
> > Is there an easy way to "tell" julia that I want this whole struct 
> > untouched? 
>
> I assume by "the second pointers" you mean the memory pointed to by 
> `L` in the code above. If that is the case, the question is how is the 
> memory they are pointing to being managed. Are they allocated by the C 
> function and needs to be manually free'd (and when are you freeing it 
> now) or are they pointing to a julia buffer you allocate? 
>
> > 
> > Thanks! 
> > 
> > Gabe 
>

Reply via email to