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燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP