2011-05-12 54 views
3

如何複製另一個指針指向的數據?複製指針中的數據

我有以下

void *startgpswatchdog(void *ptr) 
{ 
    GPSLocation *destination; 
    *destination = (GPSLocation *) ptr; 

這是否會正確地做到這一點?

我釋放了傳遞給線程後傳遞給它的數據,所以我需要複製這些數據。

回答

8

如果你想複製數據,你應該通過malloc分配新的內存,然後通過memcpy複製你的內存。

void *startgpswatchdog(void *ptr) 
{ 
    GPSLocation *destination = malloc(sizeof(GPSLocation)); 
    memcpy(destination, ptr, sizeof(GPSLocation)); 
} 
+3

+1:然而,答案應該澄清的是OP的代碼會導致UB,因爲'destination'是一個未初始化的指針。 – 2011-05-12 10:09:29

+0

好點@Oli! – 2011-05-12 10:12:30

+0

如果我在做完上述副本後創建另一個線程時只是想指向GPSLocation? – jarryd 2011-05-12 10:15:35

0

你可以做,如果你AE複製指向實際的東西要點:

void *startgpswatchdog(void *ptr) 
{ 
    GPSLocation *destination = malloc(sizeof(GPSLocation)); 
    *destination = * (GPSLocation *) ptr; 
} 

或許更好:

void *startgpswatchdog(void *ptr) 
{ 
    GPSLocation destination; 
    destination = * (GPSLocation *) ptr; 
} 
+0

第二個例子沒有做任何特別有用的事情...... – 2011-05-12 10:14:24

+0

@Oli好吧,第一個也沒有! – 2011-05-12 10:17:31

+0

這是一個好點... – 2011-05-12 10:20:26

0

你需要分配給之前分配內存指針指向的地址。 你爲什麼需要一個指針?爲什麼不使用

void *startgpswatchdog(void *ptr) 
{ 
GPSLocation destination; 
destination = (GPSLocation) *ptr; 
} 

以後,如果你需要這個變量的地址只是用

&destination 

只是不要忘記它的一個局部變量:)

+0

因爲我將指針傳遞給我創建的另一個線程作爲(void * ptr)參數 – jarryd 2011-05-12 10:18:06

+0

我的意思是本地變量 - 「目標」。 – yossi 2011-05-12 10:20:34