다른 포인터가 가리키는 데이터를 어떻게 복사합니까?포인터로 데이터 복사
나는 다음과 같은
void *startgpswatchdog(void *ptr)
{
GPSLocation *destination;
*destination = (GPSLocation *) ptr;
이 올바르게 할 것 있나요?
전달한 데이터를 전달한 후에 스레드로 전달하므로 데이터를 복사해야합니다.
다른 포인터가 가리키는 데이터를 어떻게 복사합니까?포인터로 데이터 복사
나는 다음과 같은
void *startgpswatchdog(void *ptr)
{
GPSLocation *destination;
*destination = (GPSLocation *) ptr;
이 올바르게 할 것 있나요?
전달한 데이터를 전달한 후에 스레드로 전달하므로 데이터를 복사해야합니다.
데이터를 복사하려면 malloc
을 통해 새 메모리를 할당해야하며 memcpy
을 통해 메모리를 복사하십시오. 당신이 복사 AE 포인터가 실제로 뭔가를 지적하는 경우
void *startgpswatchdog(void *ptr)
{
GPSLocation *destination = malloc(sizeof(GPSLocation));
memcpy(destination, ptr, sizeof(GPSLocation));
}
당신은 그것을 할 수 있습니다 : 아마도
void *startgpswatchdog(void *ptr)
{
GPSLocation *destination = malloc(sizeof(GPSLocation));
*destination = * (GPSLocation *) ptr;
}
또는 더 나은 : 당신은 당신이 할당하기 전에 메모리를 할당 할 필요가
void *startgpswatchdog(void *ptr)
{
GPSLocation destination;
destination = * (GPSLocation *) ptr;
}
두 번째 예제는 특별히 유용한 기능을 수행하지 않습니다 ... –
@Oli 글쎄, 둘 다 첫 번째 않습니다! –
그건 좋은 지적이야 ... –
일을 잊지
그냥 해달라고 사용
과를 사용하지만, 대답은 명확하게해야한다는 OP의 코드는'destination'이 초기화되지 않은 포인터이므로 UB를 발생시킵니다. –
좋은 지적 @Oli! –
위에서 언급 한 복사본을 작성한 후에 다른 스레드를 만들 때 GPSLocation을 가리키고 싶다면 어떻게해야합니까? – jarryd