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

Ror*_*oro 5 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);
}
Run Code Online (Sandbox Code Playgroud)

建议和建议表示赞赏.

谢谢

Roronoa Zoro

Mys*_*ial 8

我看到的第一个问题是:

memcpy (pTestDump, pImage, 204800);
Run Code Online (Sandbox Code Playgroud)

应该这样:

memcpy (pTestDump, pImage, 204800 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

你忘记了,sizeof(int)所以你只是复制了一部分数据.

另一个问题是你切换了操作数的顺序memcpy().目的地是第一个操作数:

memcpy (pImage, pTestDump, 204800 * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

  • "最佳"是主观的和依赖于情境的.基本上有3种主要方法可以在C++中分配连续的内存.1)像你现在使用的数组.2)用`new`或`malloc`分配(不要在C++中使用`malloc`).3)使用`vector`类.每个都有其优点/缺点.但有一点是你想要避免像现在这样创建大规模数组.(见这个问题:http://stackoverflow.com/questions/1847789/segmentation-fault-on-large-array-sizes) (2认同)