2011-11-26 17 views
5

Próbuję skopiować ciągły blok danych z jednej lokalizacji w pamięci głównej do innej lokalizacji. Oto co zrobiłem do tej pory, ale to nie działa. Wydaje się, że po zastosowaniu "memcpy" zawartość mojej tablicy "testDump" staje się zerami.Kopiowanie bloków pamięci do innej części pamięci

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

Porady i sugestie są mile widziane.

Dzięki

Roronoa Zoro

+0

Co to jest "pPixel"? Czy chodziło Ci o 'pImage'? – Blastfurnace

+0

Tak. Miałem na myśli pImage. Przepraszam. Nadal mam ten sam problem ... –

Odpowiedz

8

Pierwszy problem widzę to:

memcpy (pTestDump, pImage, 204800); 

powinno być tak:

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

zapomniałeś sizeof(int) więc jesteś tylko kopiowanie części danych. Kolejnym problemem jest zmiana kolejności operandów w memcpy(). Miejsce docelowe to pierwszy operand:

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

Przykro mi z powodu * przełączania operandów *, faktycznie mój błąd był w komentarzu, chcę skopiować z pImage do pTestDump. Jednak gdy dodałem * sizeof (int) to nadal nie działało ... –

+0

Nawiązując do innego otrzymanego komentarza, czy miałeś również na myśli 'pPixel' na' pImage'? Jeśli tak, możesz wydrukować coś niewłaściwego. – Mysticial

+0

Przepraszam, że chodziło mi o zdjęcie. Wciąż mam ten sam problem. Mój wskaźnik pImage wskazuje na typ danych * niepodpisany krótki *, czy to może być problem? –

4

Wydaje się, że po zastosowaniu „memcpy”, treść mojej tablicy „testDump” staje się same zera.

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

Argumenty są odwrócone w stosunku do komentarza. Myślę, że miałeś na myśli następujące rzeczy.

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

Dzięki. Ale mój błąd był w komentarzu. Chcę skopiować z pImage do pTestDump. Pomnożyłem przez sizeof (int), ale nadal mam ten sam problem ... –

Powiązane problemy