在matlab中混合运行c语言的kdtree 会导致Matlab系统崩溃
C语言实现的kdtree在输入到到matlab后编程会有系统错误,即完全崩溃;对于提供的最小kdtree_delete_demo,Matlab已经崩溃。
提示信息如下:
错误使用 kdtree_nearest_neighbor
vararg{1} must be a [Nxk] matrix of N points in k dimensions
问题来源
在win64上长时无法存储指针。通过更改此行以使用size_t或intptr_t并修复用于创建matptr的相应代码,该代码可能会起作用,但很可能还有其他问题。
解决措施
将因此所有出现的long都需要用intptr_t代替。这需要在文件中完成:
KDTree.h
kdtree_ball_query.cpp
kdtree_build.cpp
kdtree_io_from_mat.cpp
kdtree_k_neares_neighbors.cpp
kdtree_nearest_neighbor.cpp
kdtree_range_query.cpp
举例
将
long pointer1 = (long) pointer0[0];
改为
intptr_t pointer1 = (intptr_t) pointer0[0];