【发布时间】:2018-03-15 13:50:05
【问题描述】:
这是我的结构:
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;
谢谢。
【问题讨论】:
-
可能是因为
memcpy复制了所有数据,而赋值只复制了指针。 -
赋值不是必须的,
node->content = memcpy(node->content, content, content_size);等价于memcpy(node->content, content, content_size);。现在您应该更清楚为什么memcpy方式有效而node->content = content;无效。 -
顺便说一下,如果您使用例如分配内存
malloc并让node->content指向该内存,您将与node->content = content发生内存泄漏,因为您丢失了原始指针。
标签: c pointers memory linked-list dynamic-memory-allocation