[問題] 有關mexfunction傳入結構變數的問題已回收

看板MATLAB作者 (魔術研究員)時間14年前 (2011/09/08 18:05), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
各位 想請教各位一個問題 最近開始使用mexfunction來在matlab中寫C code 但是我卻遇到一個問題 那就是如果我先在m file中 初始化兩個結構變數 a.a=int8(5); a.b=int8(6); b.a=int8(7); b.b=int8(8); 然後,如果我讓b.a=a.a, 則將a整個結構變數傳至mexfunction中 重新給予 a.a=10; a.b=11; a.a與b.a竟然連動了 也就是處理出來的結果會是 a.a= 10 a.b= 11 b.a= 10 b.b= 8 今天一整天都在找這個bug,但是就我對mexfunction的瞭解,應該不會有問題才對 而且,實際上如果把a與b結構變數都傳入,看變數的address,其位置亦不同 所以應該不是指標指向的問題 想請各位幫幫我,謝謝 我把兩段檔案中的程式碼列在下方,麻煩大家幫幫我 test_address_problem.m ////////// clc; clear all; close all; mex test_address_problem_c_file.c; a.a=int8(5); a.b=int8(6); b.a=int8(7); b.b=int8(8); a.a=b.a; test_address_promblem_c_file(a); fprintf('a.a= %g\n', a.a ); fprintf('a.b= %g\n', a.b ); fprintf('b.a= %g\n', b.a ); fprintf('b.b= %g\n', b.b ); /////////// test_address_problem_c_file.c ///////////// #include "mex.h" #include <string.h> #define IN prhs[0] // 定義輸出變數 typedef struct _test_a{ char a; char b; }test_a,*ptest_a; void mexFunction(int nlhs,mxArray *plhs[],int nrhs,const mxArray *prhs[]) { int i, j, k; mxArray *mx_a; mxArray *mx_b; char *c_a; char *c_b; test_a a; mx_a=mxGetField(prhs[0], 0, "a"); c_a=mxGetPr(mx_a); a.a=(*c_a); mx_b=mxGetField(prhs[0], 0, "b"); c_b=mxGetPr(mx_b); a.b=(*c_b); a.a=10; a.b=11; (*c_a)=a.a; (*c_b)=a.b; } ///////////// -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.96.39.165
文章代碼(AID): #1EQ9Di65 (MATLAB)