全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3349
推到 Plurk!
推到 Facebook!

請問動態配置矩陣後能不能使用memcpy複製內容呢?

答題得分者是:brook
amadeus2
一般會員


發表:4
回覆:2
積分:1
註冊:2007-12-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-05-22 14:36:55 IP:163.23.xxx.xxx 訂閱
大家好
首先程式目的是由使用者選取模板的大小,所以必需要使用到動態配置記憶體的部分
然而在影像處理的部分我使用MATLAB輔助運算,再把影像的矩陣丟回來C
問題在於原本我都是使用memcpy 指術來copy Matlab矩陣給C ,做為兩種程式的資料溝通管道
但使用動態配置方面需要複雜一點的指標能力
我在試的時候一直沒辦法成功,在這邊附上我的程式內容,請大家幫我看一下可能是哪邊發生了問題
謝謝大家

[code cpp]
int TemplateszieX, TemplateszieY; //決定模板的大小

//tpltimage放著模板的影像資料(灰階)
// .............中間落落長的影像處理內容
tpltimage=engGetVariable(eng,"templateOrg"); //engGetVariable 指令的作用是將matlab Engine空間的變數傳給 Matlab矩陣

double **templateptr=new double *[TemplateszieY] ; // 配置一個動態陣列,大小由使用者圈選
for(int xx=0;xx{
templateptr[xx]=new double[TemplateszieX] ;
}
memcpy(templateptr,mxGetPr(pltimage)),TemplateszieX*TemplateszieY*sizeof(double)); //重點一直在這一句
// mxGetPr是指向tpltimage的實數資料指標,我希望能將模板影像矩陣複製到動態配置的templateptr中,使用固定矩陣的話這 一句是可以成功執行的,

for(int xx=0;xx{
delete[ ]templateptr[xx];
}
delete[]templateptr;
[/code]


還有一部分是小弟還不是非常熟悉動態陣列建立成功後如何去使用它,就像一般陣列一樣ptr[i][j]便可以了嗎


------
程式gogogo
編輯記錄
amadeus2 重新編輯於 2008-05-22 14:38:17, 註解 無‧
amadeus2 重新編輯於 2008-05-22 14:39:35, 註解 無‧
amadeus2 重新編輯於 2008-05-22 14:41:43, 註解 無‧
amadeus2 重新編輯於 2008-05-22 14:45:00, 註解 無‧
amadeus2 重新編輯於 2008-05-22 14:48:10, 註解 無‧
brook
資深會員


發表:57
回覆:323
積分:371
註冊:2002-07-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-05-30 07:29:33 IP:118.168.xxx.xxx 訂閱
1.一維可以.
2.二維以上就不可以,因為記憶體不連續,但你可以分段copy,因為二維是多個一維組成.
hipig
高階會員


發表:31
回覆:75
積分:111
註冊:2007-01-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-06-02 20:50:55 IP:220.133.xxx.xxx 未訂閱
如new出一塊一維空間可以
因為其記憶體是連續的
但二維陣列時唯一維組合
除非特殊方式宣告出一塊
不然皆不可memcpy
可嘗試將其轉為一維使用

另可參考站上使用Allocate2DArray模板方式宣告
其宣告二維陣列可為一連續記憶體空間
亦可memcpy
非常利於這方面情況
系統時間:2024-03-29 18:17:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!