2014-02-19 111 views
0

我已經看過一些類似的問題,但沒有解決方案正在爲我的案例工作。將指針指向的數據複製到另一個指針

我有一個類有一個連續運行的更新函數。該函數有一個unsigned short*參數,其中包含圖像的2D數據,每次調用更新時該數據都不相同。在開始執行時,我想將第一幀數據保存在單獨的unsigned short*中,並且此數據必須在所有執行中保持活動狀態。

//設置在執行

void Process::setup() 
{ 
    ... 
    _firstFrame = new unsigned short; //_firstFrame is an unsigned short* private variable from the class 

    return; 
} 

void Process::update(unsigned short* frame) 
{ 
    //-- Performing an initial calculation before any further processing 
    if (!_condition) 
    { 
     //some processing that changes condition to true when criteria is met 
     if (condition) 
      memcpy(_firstFrame, frame, sizeof(640*480*sizeof(unsigned short))); 
        //each frame has 640*480 dimensions and each element is an unsigned short 

     return; 
    } 

    //further processing using frame 
} 

現在,_firstFrame應該始終從框架條件滿足後,起源保持數據的開始運行一次,但_firstFrame只包含零。 有什麼幫助嗎?

+4

您只爲一個未簽名的short分配空間。想必你想要一個數組。 – ooga

+3

你想從*'_firstFrame'複製*到*或*嗎?請記住'memcpy'的目標參數是第一個。 –

+0

是的,我會編輯這個問題,因爲這個代碼被複制粘貼後,我切換他們檢查,如果我是錯誤的傳遞參數,顯然產生了分段錯誤。 –

回答

2

你需要一個數組,但你總是需要所以沒有必要動態分配它。

您還需要初始化它一次,因此您需要一些方法來跟蹤它。目前你(嘗試)分配你的第一幀時,你不知道該怎麼辦。

class Process { 
    bool got_first; 
    unsigned short first_frame[640*480]; 

public: 
    Process() : got_first(false) {} 

    void update(unsigned short *frame) { 
    if (!got_first) { 
     memcpy(first_frame, frame, sizeof(first_frame)); 
     got_first = true; 
    } 
    } 
}; 
+0

我試過了,但它不工作。我用於\t \t \t(INT N = 0; N <640 * 480; N ++) \t \t \t \t COUT << _firstFrame [N] << ENDL;要檢查_firstFrame值是否有意義,但他們不。它大部分是零,偶爾也有一些正面的價值。由於數據的性質,Frame幾乎沒有零,所以當我嘗試複製它時,somethng出錯了。 –

+0

我的代碼中沒有任何名爲'firstFrame'的東西。你的代碼無法編譯?運行時是否失敗?怎麼樣?無論如何,你的代碼是什麼? – Useless

+0

我將unsigned short * _firstFrame中的聲明更改爲unsigned short _firstFrame [640 * 480],然後從安裝程序中刪除了「新」分配。我想這實際上是一樣的東西 –

相關問題