gpt4 book ai didi

c 使用指针从堆栈复制结构到堆

转载 作者:行者123 更新时间:2023-12-01 11:17:04 24 4
gpt4 key购买 nike

给定以下类型

typedef struct {
const void *data;
uint32_t offset[2];
} TSNode;

我有一个包含赋值的函数:

TSNode* myFun() {
TSNode node = get_node();
// rest of code
}

因为 node 是在栈内存上分配的,一旦函数结束它就会消失。我想在以后跟踪该节点,所以我想将它复制到堆中。

TSNode* myFun() {
TSNode node = get_node();

TSNode* heapNode = malloc(sizeof(TSNode));
memcpy(heapNode, &node, sizeof(TSNode));
return heapNode;
}

这个 memcpy 所有数据是否正确到我的堆分配 heapNode?即过程中没有任何损坏,*data 是否完好无损?

最佳答案

Does this memcpy all data correctly to my heap allocated heapNode? i.e. nothing is corrupted in the process & the *data is intact?

这个问题的答案是,memcpy使用了shallow copy的概念。在浅拷贝中,你原来结构(节点)TSNode node = get_node();中的指针会被拷贝到新节点heapNode(TSNode* heapNode) bit by bit 也叫bit wise copy。因此,您的新 heapNode 指针也将指向与您使用 复制值的原始节点的 (TSNode node = get_node();) 指针相同的位置内存体。因此,一旦控制从函数 myFun 返回,您的原始节点将从内存中释放。因此,您的新节点指针将变为悬挂指针。这是 memcpy 的一个重要副作用。

关于c 使用指针从堆栈复制结构到堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49322955/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com