将内存块复制到内存的另一部分

时间:2011-11-26 03:59:00

标签: c++ memory

我正在尝试将连续数据块从主内存中的一个位置复制到另一个位置。这是我到目前为止所做的,但它不起作用。似乎在应用'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);
}

建议和建议表示赞赏。

由于

Roronoa Zoro

2 个答案:

答案 0 :(得分:8)

我看到的第一个问题是:

memcpy (pTestDump, pImage, 204800);

应该是这样的:

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

您忘记了sizeof(int),因此您只复制了部分数据。

另一个问题是您在memcpy()中切换了操作数的顺序。目的地是第一个操作数:

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

答案 1 :(得分: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));