我正在尝试在MATLAB中读取以下函数的int和字符串数组:
int DLLEXPORT getdata(int *index, char *id[])
在C中,我只需执行以下代码即可:
int count;
int *index = calloc(MAXLINE, sizeof(int));
char **id = calloc(MAXLINE, sizeof(char*));
for (for i = 0; i < MAXLINE; ++i)
id[i] = malloc(MAXID);
errcode = getdata(index, id);
在MATLAB中,我正在尝试以下代码而没有运气:
errorcode = libpointer('int32');
index = libpointer('int32Ptr');
id = libpointer('stringPtrPtr');
[errorcode, index, id] = calllib('mylib','getdata', index, id);
我已经尝试初始化libpointers,我收到了同样的消息“检测到Segmentation violation”。有人可以帮帮我吗?
答案 0 :(得分:0)
你肯定需要初始化你的指针 - 现在它们指向无处,它们被初始化为0.这很可能导致段错误。如果你试图初始化它们,你一定做错了。试试吧像这样
index = libpointer('int32Ptr', [1 2 3 4]);
id = libpointer('stringPtrPtr', {'asdfasdf', 'asdfasdf'});
你也可以传递普通的matlab数组,而不是制作一个libpointer:
[errorcode, index, id] = calllib('mylib','getdata', [1 2 3 4], {'asdfasdf', 'asdfasdf'});
您可以找到有关matlab类型和相应原生类型here的信息。
编辑这是一个简单的共享库函数,它接受您的输入(您的评论如下)并使用mexPrintf在屏幕上打印一个字符串
#include <string.h>
#include <mex.h>
void testfun(int *index, char* id[]){
int idx0 = index[0];
mexPrintf("printing string %d: id[0] %s\n", idx0, id[idx0]);
}
该函数使用整数数组中的第一个值(在您的情况下为index [0])从字符串数组(id [index [0]])打印指定的字符串。输出是
printing string 0: id[0] 01234567890123456789012345678901
所以它有效,试试吧。请记住,您还必须向loadlibrary提供相应的头文件!
如果您可以正确执行上述操作,那么您提供给getdata的数据很可能是错误的,您必须在某处获得段错误。也许你以某种方式修改输入参数?例如创建非NULL终止字符串?