c - 指针之间的数据

标签 c pointers struct

如果进行以下操作,是复制指针中的实际数据还是指针本身?

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/

相关文章:

c - 快速 3D Lut 查找

c - 链表,以错误的顺序存储?

c - C 中的 scanf 和 char 指针——意外输出

c - 不兼容的类型分配

c - 如何在 C 中使用 malloc 和 realloc 正确分配结构中的数组?

c - 不带BOS的分割Ogg vorbis流

c++ - extern “C”在C++中有什么作用?

c++ - 如何从指针初始化堆栈对象?

c# - 结构重叠或错误对齐

c# - C# 中 Struct 的奇怪行为