MATLAB 板


LINE

各位大大好! 我目前在写C转matlab的程式 也就是要用mex去编译.c档 但是现在碰到一个关於structure的传递问题 目前我的构想是透过matlab初始一个structure 然後再将这个structure输出(return) 等等把C code贴在最下方 先说我目前碰到的问题 现在我已经可以把创起来的struct初始成功 输出里面的资料要确认也都OK 但是就在她要把这个struct传出来(return)的时候 出错了!!!! 而且这个错误是会crash掉matlab的 已经搞好久了 还是无解~ 原本以为是没有把初始好的struct回存到plhs[0] 所以使用mxSetData把pointer回存回去 但好像还是不行 所以希望版上有经验的大大可以帮帮我 帮我找出问题点在哪边 可以顺利输出~拜托拜托! 感恩 ---------- 以下是程式码 ---------- #include "mex.h" #define Uint8 unsigned char #define Int8 char #define Uint16 unsigned short #define Int16 short #define Uint32 unsigned int #define Int32 int #define NUMBER_OF_STRUCTS (sizeof(*img)/sizeof(ImgInfo)) #define NUMBER_OF_FIELDS (sizeof(field_names)/sizeof(*field_names)) typedef struct { Uint8 depth; Uint16 imgWidth; Uint16 imgHeight; Uint16 *imgData; }ImgInfo; void Init(ImgInfo *img) { img->depth = 2; img->imgWidth = 256; img->imgHeight = 256; img->imgData = (Uint16*)malloc(sizeof(ImgInfo)); memset(img->imgData, 0, sizeof(Uint16)*img->imgWidth*img->imgHeight); } void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) { const char *field_names[] = {"depth", "imgWidth", "imgHeight", "imgData"}; ImgInfo *img; mwSize dims[2] = {1, NUMBER_OF_STRUCTS}; plhs[0] = mxCreateStructArray(2, dims, NUMBER_OF_FIELDS, field_names); img = mxGetPr(plhs[0]); Init(img); printf("%d\n", img->depth); printf("%d\n", img->imgWidth); printf("%d\n", img->imgHeight); mxSetData(plhs[0], img); } --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.25.174.108 ※ 编辑: vulmoon 来自: 114.25.174.108 (12/19 22:33)
1F:推 sunev:mxGetPr 得到的东西的型别是ImgInfo*吗? 12/19 23:00
2F:→ vulmoon:我其实不是很确定,它是说取实数,可是我用它可以写值进去 12/19 23:05
3F:推 sunev:可以是什麽意思,你不是说matlab crash了吗? 12/20 00:58
4F:→ vulmoon:我有三行printf把值print出来看,有print成功,可是当要 12/20 07:24
5F:→ vulmoon:结束这函式时,它要输出这结构就会crash。 12/20 07:25
6F:推 sunev:你的crash指的是matlab被强迫结束吗? 12/20 14:55
7F:→ sunev:要结束这函式是指这个mex file执行结束了吗?然後你在matlab 12/20 14:55
8F:→ sunev:打这个变数,想看里面的内容时,matlab crash了? 12/20 14:56
9F:→ vulmoon:没错!是matlab被强制结束!它会跳出几个选项给你选,但在你 12/20 19:00
10F:→ vulmoon:重开matlab之前都无法下指令。结束这函式的确是只该mex fi 12/20 19:01
11F:→ vulmoon:-le执行结束。一执行结束就crash,还无法打这个变数。 12/20 19:05
12F:推 sunev:这不叫结束函式,这叫编译成功。 12/21 02:31
13F:→ sunev:话说回来,如果matlab被强制结束,你怎麽知道printf有成功? 12/21 02:32
14F:→ vulmoon:噢噢~可能我表达错误!我编译都是成功的!是执行函式的时候 12/21 19:04
15F:→ vulmoon:才crash!所以才会pringf成功! 12/21 19:04
16F:推 sunev:编译成功不代表printf成功耶,也不代表mxSetData成功 12/22 03:14
17F:→ sunev:也不代表输出结构成功。 12/22 03:14
18F:→ vulmoon:当然是有看到printf资料我才知道printf有成功阿@@!也就是 12/22 07:34
19F:→ vulmoon:输出结构时失败才会crash!!mxSetData有没有成功不确定!因 12/22 07:35
20F:→ vulmoon:为无法输出结构,所以我不知道有没有Set成功! 12/22 07:35
21F:推 sunev:所以你的意思是在crash之前,你有看过matlab的command 12/22 16:57
22F:→ sunev:windows 印出讯息? 12/22 16:57
23F:→ vulmoon:是的~没有错!我昨天有更改过程式~是可以输出结构了~不过方 12/23 12:17
24F:→ vulmoon:法很烂!我晚点PO上来!再请你帮我看一下! 12/23 12:17







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP