node-> pointer = pointer vs node->指针使用memcpy

时间:2017-10-04 08:25:35

标签: c pointers memory linked-list dynamic-memory-allocation

这是我的结构:

typedef struct s_list
{
    void *content;
    size_t content_size;
    struct s_list *next;
}   t_list;

我正在尝试创建一个函数来创建一个新节点:

t_list *lstnew(void const *content, size_t content_size);

我的问题是为什么以下结果不同:

为什么以下代码完美无缺:

node->content = memcpy(node->content, content, content_size);

如果以下情况不符合:

node->content = content;

感谢。

2 个答案:

答案 0 :(得分:1)

作业:

node->content = content;

只是使指针node->content指向指针content所在的相同位置,而不复制任何内容。

然而,

memcpy(node->content, content, content_size);

实际上 复制 指针content指向指针node->content指向的位置的内容。

答案 1 :(得分:1)

content仅包含数据存储在内存中的地址。

使用node->content = content,您无法复制任何数据。您所做的只是将node->content设置为content中的内存地址。

之后node->contentcontent 都指向相同的内存/数据。如果更改或甚至释放了该内存,则node也将指向更改或释放内存。

为确保您的node拥有content的私人副本(您在listnew()中传递),您必须使用memcpy()。然后,您的程序的其余部分可以更改/释放原始content,而不会影响node->content

编辑:我认为您在使用node->content之前必须首先分配内存并将其地址分配给memcpy()