2011-11-26 5 views
5

メインメモリのある場所から別の場所に連続したデータブロックをコピーしようとしています。ここまで私がこれまで行ったことはありますが、うまくいかないのです。 'memcpy'を適用すると、配列 'testDump'の内容はすべてゼロになります。メモリブロックをメモリの別の部分にコピーする

//Initialize array to store pixel values of a 640x480 image 
int testDump[204800]; 
for(int k = 0; k<204800; k++) 
    testDump[k] = -9; 

//pImage is a pointer to the first pixel of an image 
pImage = dmd.Data(); 

//pTestDump is a pointer to the first element in the array 
int* pTestDump = testDump; 

//copy content from pImage to pTestDump 
memcpy (pTestDump, pImage, 204800); 

for(int px_1 = 0; px_1<300; px_1++) 
{ 
    std::cout<<"Add of pPixel: "<<pImage+px_1<<", content: "<<*(pImage+px_1); 
    std::cout<<"Add of testDump: "<<pTestDump+px_1<<", content: "<<*(pTestDump+px_1); 
} 

アドバイスや提案があります。

おかげ

ロロノア・ゾロ

+0

「pPixel」とは何ですか? 'pImage'を意味しましたか? – Blastfurnace

+0

はい。私はpImageを意味しました。ごめんなさい。私はまだ同じ問題を抱えています... –

答えて

8

は、私が見る最初の問題はこれです:

memcpy (pTestDump, pImage, 204800); 

このようになります。

memcpy (pTestDump, pImage, 204800 * sizeof(int)); 

あなたは、あなただけだそうsizeof(int)を忘れてしまいましたデータの一部をコピーします。

もう1つの問題は、オペランドの順序をmemcpy()に変更したことです。

memcpy (pImage, pTestDump, 204800 * sizeof(int)); 
+0

*オペランドの切り替えについて申し訳ありません*、実際に私の間違いがコメントにありました.pImageからpTestDumpにコピーしたいと思います。しかし、* sizeof(int)を追加してもまだ動作しませんでした... –

+0

あなたが受け取った他のコメントを参照すると、 'pPixel'も' pImage'ですか?もしそうなら、あなたは間違ったことを印刷することができます。 – Mysticial

+0

ああ、申し訳ありません、私はpImageを意味しました。私はまだ同じ問題を抱えています。私のポインタのpImageは* unsigned short *のデータ型を指していますが、これが問題でしょうか? –

4

memcpyを」を適用した後、私の配列「testDump」の内容がすべてゼロになっているようです:先が最初のオペランドです。

//copy content from pTestDump to pImage 
memcpy (pTestDump, pImage, 204800); 

引数はコメントに対して反転しています。私はあなたが次のことを意味したと思います。

//copy content from pTestDump to pImage 
memcpy (pImage, pTestDump, 204800*sizeof(int)); 
+0

ありがとうございます。しかし、私の間違いはコメントにあった。私はpImageからpTestDumpにコピーしたいです。私はsizeof(int)を掛けましたが、私はまだ同じ問題を抱えています... –

関連する問題