Hi,
When I run the function bellow I have this totally unexpected (to me at
least) variable corruption effect
X[item].direction = 0
out = Float32[1.0f0]
X[item].direction = 1
out = Float32[5.0f0,5.0f0,5.0f0,5.0f0,5.0f0,5.0f0]
X[item].direction = 0
out = Float32[-1.9983972f18,-1.9983972f18,-1.9983972f18,-1.9983972f18,-
1.9983972f18,-1.9983972f18]
The loop runs 3 times and the second iteration holds the correct value. But
than, in the 3rd iteration something corrupts the the 'out' variable (the
code doesn't touch it) and I'm thus unable to return its correct value.
What am I doing wrong, or is there a bug?
function GMTJL_post_process(API::Ptr{Void}, X, n_items::Int)
out = [1.f0]
for (item = 1:n_items)
if (X[item]._type == GMT_IS_GRID) # We read or wrote a
GMT grid, examine further
#
if ((R = GMT_Retrieve_Data(API, X[item].ID)) == C_NULL)
error("GMTJL_PARSER:Error retrieving grid from GMT\n")
end
convert(Ptr{GMT_GRID}, R)
elseif (X[item]._type == GMT_IS_DATASET)
@show(X[item].direction)
if (X[item].direction == GMT_OUT) # Here, GMT_OUT means
"Return this info to Julia"
if ((R = GMT_Retrieve_Data(API, X[item].ID)) == C_NULL)
error("GMTJL_PARSER: Error retrieving matrix from GMT")
end
Rb = unsafe_load(convert(Ptr{GMT_MATRIX}, R))
if (Rb.shape == GMT_IS_COL_FORMAT) # Easy, just copy
#memcpy (d, M->data.f8, M->n_rows * M->n_columns *
sizeof (double));
else # Must transpose
out = pointer_to_array(convert(Ptr{Cfloat},Rb.data),
Rb.n_rows
* Rb.n_columns)
end
else
R = X[item].obj;
end
@show(out)
# Else we were passing Julia data into GMT as data input and we
are now done with it.
# We always destroy R at this point, whether input or output.
The alloc_mode
# will prevent accidential freeing of any externally-allocated
arrays.
if (GMT_Destroy_Data(API, pointer([R])) != GMT_NOERROR)
error("GMTJL_post_process: Failed to destroy matrix R used
in the interface bewteen GMT and Julia")
end
end
end
return out
end