![](/img/trans.png)
[英]Passing pointer argument in MATLAB to a C-DLL function foo(char**)
[英]Reading int and strings arrays in MATLAB from a C-DLL function
我正在尝试在MATLAB中读取以下函数的int和字符串数组:
int DLLEXPORT getdata(int *index, char *id[])
在CI中,只需执行以下代码即可使用:
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,并且得到了相同的消息“检测到细分违规”。 有人可以帮我吗?
您绝对需要初始化您的指针-现在它们指向无处,它们被初始化为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类型和相应本机类型的信息 。
“编辑 ”是一个简单的共享库函数,可接收您的输入(下面的注释)并使用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
因此,请尝试一下。 请记住,您还必须提供相应的头文件来加载库!
如果您可以正确执行上述操作,则很可能您提供给getdata的数据是错误的,并且您必须在该处出现段错误。 也许您以某种方式修改了输入参数? 例如创建非NULL终止的字符串?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.