Skip to content

IntArray in C++14 #15

@jloveric

Description

@jloveric

IntArray is being set to null when passed as argument through ffi to c functionr.

The IntArray is being initialized just fine, in node, but when passed to my c functions, it is setting the pointer to NULL. I'm using c++14 and suspect this may have something to do with the problem. Alas, it seems inconsistent, it is working in some cases and not in others -- could be memory/pointer issues in my code, but valgrind is not indicating anything in this or any other test. I'm using GCC 5.2 and node 7.5

in node

let IntArray = ArrayType(ref.types.int);
let neuronsPerLayer = new IntArray(3)
let data =spike.completeNetwork(neuronsPerLayer, 3)

in .h file

NetworkDataArray* completeNetwork(int* neuronsPerLayer, int numLayers);

in .cpp file

NetworkDataArray* completeNetwork(int* neuronsPerLayer, int numLayers) {
  //neuronsPerLayer is 0, so it crashes as soon as I try an access it
  std::vector<int> n(neuronsPerLayer, neuronsPerLayer + numLayers);
  ...
}

In the ffi file

let libSpike = ffi.Library('source/libspike.so', {
  'completeNetwork' : [NetworkDataRef,[IntArray, 'int']]})

backtrace from gcc

#0 0x00007ffff4504829 in completeNetwork (neuronsPerLayer=0x0, numLayers=3) at /home/john/SPIKE/source/spike_wrap.cpp:44
#1 0x00007ffff472ebc2 in ffi_call_unix64 () from /home/john/SPIKE/node_modules/ffi/build/Release/ffi_bindings.node
#2 0x00007ffff472d71e in ffi_call () from /home/john/SPIKE/node_modules/ffi/build/Release/ffi_bindings.node
#3 0x00007ffff4724c94 in FFI::FFICall(Nan::FunctionCallbackInfov8::Value const&) () from /home/john/SPIKE/node_modules/ffi/build/Release/ffi_bindings.node
#4 0x00007ffff4724686 in Nan::imp::FunctionCallbackWrapper(v8::FunctionCallbackInfov8::Value const&) () from /home/john/SPIKE/node_modules/ffi/build/Release/ffi_bindings.node
#5 0x0000000000a980d5 in v8::internal::FunctionCallbackArguments::Call(void ()(v8::FunctionCallbackInfov8::Value const&)) ()
#6 0x0000000000b0afec in v8::internal::MaybeHandlev8::internal::Object v8::internal::(anonymous namespace)::HandleApiCallHelper(v8::internal::Isolate
, v8::internal::Handlev8::internal::HeapObject, v8::internal::Handlev8::internal::HeapObject, v8::internal::Handlev8::internal::FunctionTemplateInfo, v8::internal::Handlev8::internal::Object, v8::internal::BuiltinArguments) ()
#7 0x0000000000b0b565 in v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*) ()

Anyway, not totally sure this is IntArray problem or a problem in my own code. However, I'm not having any issues running in pure c/c++.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions