2011-11-26 16 views
5

Estoy intentando copiar un bloque continuo de datos de una ubicación en la memoria principal a otra ubicación. Esto es lo que hice hasta ahora, pero no está funcionando. Parece que después de aplicar 'memcpy', el contenido de mi matriz 'testDump' se convierte en ceros.Copiar bloques de memoria a otra parte de la memoria

//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); 
} 

Se agradecen las sugerencias y sugerencias.

Gracias

Roronoa Zoro

+0

¿Qué es 'pPixel'? ¿Querías decir 'pImage'? – Blastfurnace

+0

Sí. Quise decir pImage. Lo siento. Sigo teniendo el mismo problema ... –

Respuesta

8

El primer problema que veo es la siguiente:

memcpy (pTestDump, pImage, 204800); 

debe ser la siguiente:

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

se le olvidó la sizeof(int) por lo que está solamente copiando una parte de los datos.

El otro problema es que cambió el orden de los operandos en memcpy(). El destino es el primer operando:

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

Disculpa por * cambiar de operando *, en realidad mi error fue en el comentario, quiero copiar de pImage a pTestDump. Sin embargo, cuando agregué * sizeof (int) todavía no funcionaba ... –

+0

En referencia al otro comentario que recibió, ¿quiso decir también que 'pPixel' es' pImage'? Si es así, podría estar imprimiendo algo equivocado. – Mysticial

+0

Oh, lo siento, quise decir pImage. Todavía estoy teniendo el mismo problema. Mi puntero pImage apunta a un tipo de datos * sin signo corto *, ¿podría ser este el problema? –

4

Parece que después de aplicar 'establecimiento de memoria', el contenido de mi array 'testDump' se convierte en ceros.

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

Los argumentos se invierten con respecto al comentario. Creo que quisiste decir lo siguiente.

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

Gracias. Pero mi error fue en el comentario. Quiero copiar de pImage a pTestDump. Multiplicé por sizeof (int) pero sigo teniendo el mismo problema ... –

Cuestiones relacionadas