如何複製另一個指針指向的數據?複製指針中的數據
我有以下
void *startgpswatchdog(void *ptr)
{
GPSLocation *destination;
*destination = (GPSLocation *) ptr;
這是否會正確地做到這一點?
我釋放了傳遞給線程後傳遞給它的數據,所以我需要複製這些數據。
如何複製另一個指針指向的數據?複製指針中的數據
我有以下
void *startgpswatchdog(void *ptr)
{
GPSLocation *destination;
*destination = (GPSLocation *) ptr;
這是否會正確地做到這一點?
我釋放了傳遞給線程後傳遞給它的數據,所以我需要複製這些數據。
如果你想複製數據,你應該通過malloc
分配新的內存,然後通過memcpy
複製你的內存。
void *startgpswatchdog(void *ptr)
{
GPSLocation *destination = malloc(sizeof(GPSLocation));
memcpy(destination, ptr, sizeof(GPSLocation));
}
你可以做,如果你AE複製指向實際的東西要點:
void *startgpswatchdog(void *ptr)
{
GPSLocation *destination = malloc(sizeof(GPSLocation));
*destination = * (GPSLocation *) ptr;
}
或許更好:
void *startgpswatchdog(void *ptr)
{
GPSLocation destination;
destination = * (GPSLocation *) ptr;
}
第二個例子沒有做任何特別有用的事情...... – 2011-05-12 10:14:24
@Oli好吧,第一個也沒有! – 2011-05-12 10:17:31
這是一個好點... – 2011-05-12 10:20:26
你需要分配給之前分配內存指針指向的地址。 你爲什麼需要一個指針?爲什麼不使用
void *startgpswatchdog(void *ptr)
{
GPSLocation destination;
destination = (GPSLocation) *ptr;
}
以後,如果你需要這個變量的地址只是用
&destination
只是不要忘記它的一個局部變量:)
+1:然而,答案應該澄清的是OP的代碼會導致UB,因爲'destination'是一個未初始化的指針。 – 2011-05-12 10:09:29
好點@Oli! – 2011-05-12 10:12:30
如果我在做完上述副本後創建另一個線程時只是想指向GPSLocation? – jarryd 2011-05-12 10:15:35