如果进行以下操作,是复制指针中的实际数据还是指针本身?
void nav_runGpsSystem(GPSLocation *dest)
{
GPSLocation *destination = malloc(sizeof(GPSLocation));
destination = dest;
其中GPSLocation如下
typedef struct
{
double latitude;
double longitude;
}
GPSLocation;
问题是正在创建的 GPSLocation
,即指针,是在使用它的子系统之外创建的,但它仍在同一 block 板上(运行 ubuntu 上网本版本的 pandaboard)。我不希望指针丢失数据以某种方式损坏,所以我想复制第一个指针指向的数据,以便创建它的系统可以在需要时释放指针。
编辑
阅读答案后很明显我必须取消引用使用
*destination = *dest
如果我想将数据传递给线程怎么办
这样
void *startgpswatchdog(void *ptr)
{
GPSLocation *destination;
destination = (GPSLocation *) ptr;
如果我现在将数据复制到我的系统中,是否需要在 pthread 中再次复制数据,或者只传递指针就足够了,因为它已经被分配并且线程共享相同的内存空间?
最佳答案
您正在将 destination 分配给一个新的内存块,但随后指向远离该 block 的位置(内存泄漏 - 您无法取回该内存)并指向现有的 dest 对象。 dest 和 destination 是指向同一个对象的两个指针。
如果要复制需要取消引用的对象:*destination = *dest;
但是随后您需要以某种方式跟踪目标 ptr,以便稍后可以释放分配的内存 - 从您的示例中不清楚您打算如何执行此操作。
然后您暗示您将要访问该对象的多个线程? - 请注意,您需要使用互斥锁或临界区来保护对象以避免并发访问。
关于c - 指针之间的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5909480/