Subject: [ruby-ffi] Re: Problem with a double** array |
From: mael |
Date: 1/5/10 6:04 AM |
To: ruby-ffi |
Okay, I understood that the offset should be in terms of bytes, and
not of the underlying struct, and that there is no reason I have a
valid size
when retrieving a "naked pointer",
but why is the following code triggering a segfault ?
def do_clustering
article_vectors = get_article_vectors()
ncols = article_vectors.size
nrows = article_vectors.map{ |av| av.map{ |id,tfidf| id }.max }.max
+ 1
p_size = FFI.type_size :pointer
d_size = FFI.type_size :double
data = FFI::MemoryPointer.new :pointer, nrows
for i in (0..nrows-1)
row_i = FFI::MemoryPointer.new :double, ncols
data.put_pointer i*p_size, row_i
end
for j in (0..ncols-1)
col_j = article_vectors[j]
col_j.each do |i,tfidf|
c = data.get_pointer i*p_size
puts "i=#{i} (nrows=#{nrows}), j=#{j} (ncols=#{ncols}), c = #
{c}"
c.put_double(j*d_size, tfidf)
end
end
end