2011-11-26 12 views
5

Sto provando a copiare un blocco continuo di dati da una posizione nella memoria principale in un'altra posizione. Ecco cosa ho fatto finora, ma non funziona. Sembra che dopo aver applicato 'memcpy', il contenuto del mio array 'testDump' diventi tutti zeri.Copia i blocchi di memoria in un'altra parte della 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); 
} 

Consigli e suggerimenti sono apprezzati.

Grazie

Roronoa Zoro

+0

Che cos'è 'pPixel'? Intendevi 'pImage'? – Blastfurnace

+0

Sì. Intendevo pImage. Scusate. Sto ancora avendo lo stesso problema ... –

risposta

8

Il primo problema che vedo è questa:

memcpy (pTestDump, pImage, 204800); 

dovrebbe essere questo:

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

hai dimenticato il sizeof(int) così sei solo copiare una parte dei dati.

L'altro problema è che è stato commutato l'ordine degli operandi in memcpy(). La destinazione è il primo operando:

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

Mi dispiace per il * cambio operando *, in realtà il mio errore era nel commento, voglio copiare da pImage a pTestDump. Tuttavia, quando ho aggiunto * sizeof (int) non funzionava ancora ... –

+0

Riferendoti all'altro commento che hai ricevuto, intendevi anche che 'pPixel' fosse' pImage'? Se è così, potresti stampare la cosa sbagliata. – Mysticial

+0

Oh scusa intendevo pImage. Sto ancora avendo lo stesso problema. Il mio puntatore pImage punta a un tipo di dati * unsigned short *, potrebbe essere questo il problema? –

4

Sembra che dopo l'applicazione 'memcpy', il contenuto della mia serie 'testDump' diventa tutti gli zeri.

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

Gli argomenti sono invertite rispetto al commento. Penso che tu intenda il seguente.

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

Grazie. Ma il mio errore era nel commento. Voglio copiare da pImage a pTestDump. Ho moltiplicato per sizeof (int) ma sto ancora avendo lo stesso problema ... –